我最近进入了gcc的内联汇编,并具有基本的汇编知识,我理解如何使系统调用相当好,直到我试图用一个或多个参数执行一个简单的sys_execve。 如果我没有传递任何附加参数,系统调用execve可以正常工作,并且在尝试传递任何参数时仅运行不带参数的可执行文件。执行内联汇编
#include <stdio.h>
char *argv[]={"/bin/echo","parameter test", NULL};
int main(){
__asm__ volatile ("int $0x80"
:
:"a"(11), // syscall number (execve)
"b"(argv[0]), // filename
"c"(argv), // arguments
"d"(0)); // env
return 0;
}
我不知道有什么可以去错了,因为我已经测试这与
execve(argv[0], argv, NULL);
和它的工作如预期。
查看[sys_execve](http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html)的api,我不确定你的参数是否正确。另外,你正在编译x64?如果是这样,你不应该使用int 0x80。 –
我正在编译x64,并且根据我当前的进度,文件名部分是正确的,因为我尝试执行的任何可执行文件都可以正常工作。我坚持的部分是给它任何参数。我用户[this](http://syscalls.kernelgrok.com/)来确定我必须通过。 – LazyShpee