繁体   English   中英

如何在nasm上设置execve调用正确?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM