最近gccのインラインアセンブリーに入って基本的なアセンブリーに関する知識があるので、1つ以上の引き数を使って簡単なsys_execveを実行しようとするまで、syscallをうまく作成する方法を理解しました。 システムコール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