使用程序集执行系统命令(bash)?
execute system command (bash) using assembly?
基本上我正在尝试使用程序集执行命令 /bin/ls
,但不幸的是我失败了:
SECTION .data
buf: db "Hello", 5
SECTION .text
global _start
_start:
xor eax, eax
mov edx, eax
push edx
mov eax, 0x736c2f2f ; "sl/"
push eax
mov eax, 0x6e69622f ; "nib/"
push eax
mov ebx, esp
push edx
mov eax, 0x2f
push eax
mov ecx, esp
mov eax, 11
xor edx, edx
int 0x80
mov eax, 1
int 0x80
但是如果我将 mov eax, 11
更改为 mov eax, 4
并在 xor edx, edx
之后添加 mov edx, 7
。它打印 /bin/ls
谁能指出我犯的错误?
用 nasm -g -f elf -F dwarf ./shell.asm && ld -m elf_i386 -o shell shell.o
编译代码,我的弧线是 Linux kali 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux
发现了问题,正如@Jestor(谢谢)指出的那样,我需要将执行文件存储在ebx
和所有参数,包括ecx
中的文件名并设置edx
为 null,如下所示:
SECTION .data
buf: db "./", 0
SECTION .text
global _start
_start:
xor eax, eax
xor edx, edx
push eax
push long 0x736c2f2f ; "sl/"
push long 0x6e69622f ; "nib/"
mov ebx, esp
push eax
push byte 0x2f
mov esi, esp
push eax
push esi
push ebx
mov ecx, esp
mov eax, 0x0b
int 0x80
mov eax, 1
int 0x80
在我工作 shell 之后,ecx
如下所示:
(gdb) x/50x $ecx
0xffffd370: 0xffffd384 0xffffd37c 0x00000000 0x0000002f
0xffffd380: 0x00000000 0x6e69622f 0x736c2f2f 0x00000000
基本上我正在尝试使用程序集执行命令 /bin/ls
,但不幸的是我失败了:
SECTION .data
buf: db "Hello", 5
SECTION .text
global _start
_start:
xor eax, eax
mov edx, eax
push edx
mov eax, 0x736c2f2f ; "sl/"
push eax
mov eax, 0x6e69622f ; "nib/"
push eax
mov ebx, esp
push edx
mov eax, 0x2f
push eax
mov ecx, esp
mov eax, 11
xor edx, edx
int 0x80
mov eax, 1
int 0x80
但是如果我将 mov eax, 11
更改为 mov eax, 4
并在 xor edx, edx
之后添加 mov edx, 7
。它打印 /bin/ls
谁能指出我犯的错误?
用 nasm -g -f elf -F dwarf ./shell.asm && ld -m elf_i386 -o shell shell.o
编译代码,我的弧线是 Linux kali 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux
发现了问题,正如@Jestor(谢谢)指出的那样,我需要将执行文件存储在ebx
和所有参数,包括ecx
中的文件名并设置edx
为 null,如下所示:
SECTION .data
buf: db "./", 0
SECTION .text
global _start
_start:
xor eax, eax
xor edx, edx
push eax
push long 0x736c2f2f ; "sl/"
push long 0x6e69622f ; "nib/"
mov ebx, esp
push eax
push byte 0x2f
mov esi, esp
push eax
push esi
push ebx
mov ecx, esp
mov eax, 0x0b
int 0x80
mov eax, 1
int 0x80
在我工作 shell 之后,ecx
如下所示:
(gdb) x/50x $ecx
0xffffd370: 0xffffd384 0xffffd37c 0x00000000 0x0000002f
0xffffd380: 0x00000000 0x6e69622f 0x736c2f2f 0x00000000