Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将字符串数组作为参数传递给函数?_Linux_Assembly_X86_Fasm - Fatal编程技术网

Linux 如何将字符串数组作为参数传递给函数?

Linux 如何将字符串数组作为参数传递给函数?,linux,assembly,x86,fasm,Linux,Assembly,X86,Fasm,如何将字符串数组作为参数传递给汇编程序中的函数? 例如,假设我想调用execve()函数,如下所示: int execve(const char *filename, char *const argv[], char *const envp[]); 所以我这样做: test.asm 生成文件 但当我运行程序execve()时,无法执行请求的程序,strace./test显示以下消息: execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 v

如何将字符串数组作为参数传递给汇编程序中的函数? 例如,假设我想调用execve()函数,如下所示:

int execve(const char *filename, char *const argv[], char *const envp[]);
所以我这样做:

test.asm 生成文件 但当我运行程序execve()时,无法执行请求的程序,strace./test显示以下消息:

execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
如何正确地将“args”变量传递给execve函数


谢谢:)

你知道这在C语言中是如何工作的吗?字符串是指针,字符串数组是指针数组。因此,您需要执行以下操作:

filename db '/bin/ls', 0 
dot db '.', 0
args dd filename, dot, 0

请注意,
args
dd
以获取指针大小的项目,它由字符串的地址填充。

要了解如何完成某项操作,请用C编写并查看编译器输出。使用
lea ebx,[filename]
将标签的地址移动到寄存器中。
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
filename db '/bin/ls', 0 
dot db '.', 0
args dd filename, dot, 0