以下代码显示
重定位被截断以适合: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中声明字符串数组。
答案 0 :(得分:0)
正如@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
失败的可能性,并正确处理此问题。