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