据说,将参数传递给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
您必须将-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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。