![](/img/trans.png)
[英]Does `execve()` set up registers to invoke dynamic linker or the executable to be executed?
[英]How to set up execve call on nasm right?
以下代码显示
重定位被截断以适合:R_386_8针对“ .data”
child:
mov eax,11
mov ebx,echo
mov ecx,argv
xor edx,edx
int 0x80
section .data
echo db '/bin/echo',0
argv0 db 'echo',0
argv1 db 'child excuted',0
argv db argv0, argv1
我应该如何设置execve调用权? 我本以为将地址放在堆栈中并使用esp,但我仍然需要知道如何在nasm中声明字符串数组。
正如@Jester所建议的,您需要正确声明argv
:
argv dd argv0, argv1, 0
db
是指定义8位字节的列表。 dw
可让您定义16位短裤。 dd
用于32位数字-在32位Linux上,这是正确的指针大小。 (您将在64位上使用dq
,因为这是一个64位数字,在这种情况下,它是正确的指针大小。)
execve
期望以NULL结尾的指针列表,因此我们对每个指针使用dd
,然后使用NULL(0)终止参数列表。
另外-尽管execve
通常不会返回,但是健壮的代码将考虑execve
失败的可能性,并适当地进行处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.