我最近進入了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