据说,将参数传递给execve syscall非常简单。
在教程中,讲师说这只是一行,而把它留作练习。
下面的代码执行“ ls”命令。我正在尝试执行“ ls -la”之类的东西。 搜索后,我仍然不知道在何处添加“ -la”!
我知道它在ecx寄存器指向的结构中,并且必须以null终止。现在,ecx包含一个到/ bin / ls的地址。参数应该是另一个地址吗? argv是一个数组,第一个元素是“ / bin / ls” ...
global _start
section .text
_start:
xor eax, eax
push eax
push 0x736c2f6e
push 0x69622f2f ; //bin/ls
mov ebx, esp
push eax
mov edx, esp
push ebx
mov ecx, esp
mov al, 11
int 0x80
这不起作用:
xor eax, eax
push eax
push 0x2a632020
push 0x736c2f6e
push 0x69622f2f ; /bin/ls c*
mov ecx, esp
答案 0 :(得分:3)
您必须将-la
参数保存在ecx
寄存器中,并将其复制到esp
寄存器中(我的意思是在堆栈中)
push eax
push byte 0x61
push word 0x6c2d
mov ecx, esp ; -la
以下是您修改的代码:
global _start
section .text
_start:
xor eax, eax
push eax
push byte 0x61
push word 0x6c2d
mov ecx, esp ; -la
push eax
push 0x736c2f6e
push 0x69622f2f ; //bin/ls
mov ebx, esp
push edx
push ecx
push ebx
mov ecx, esp
mov al, 11
int 0x80
代码工作正常:)
% ./list
total 4
-rwxrwxr-x 1 febri febri 512 Oct 5 07:45 list
%