如何在nasm上设置execve调用?

时间:2015-04-23 16:56:38

标签: linux assembly exec nasm system-calls

以下代码显示

  

重定位被截断以适合: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中声明字符串数组。

1 个答案:

答案 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失败的可能性,并正确处理此问题。