【发布时间】:2016-03-27 02:27:54
【问题描述】:
我最近接触了 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 的api,我不确定你的参数是否正确。另外,你是为 x64 编译的吗?如果是这样,您不应该使用 int 0x80。
-
我正在为 x64 编译,根据我目前的进度,文件名部分是正确的,因为我尝试执行的任何可执行文件都有效。我坚持的部分是给它任何参数。我使用this 来确定我必须通过什么。
标签: linux gcc x86-64 system-calls inline-assembly