Ich habe vor kurzem in GCC Inline-Assembly und mit grundlegenden Assembly-Kenntnisse, ich verstand, wie syscalls ziemlich gut, bis ich versuchte, eine einfache sys_execve mit einem oder mehreren Argumenten zu machen. Der Systemaufruf execve funktioniert einwandfrei, wenn ich keine zusätzlichen Parameter übergebe, und führe die ausführbare Datei ohne Parameter aus, wenn ich versuche, eine zu übergeben.Execve Inline-Assembly
#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;
}
Ich habe keine Ahnung, was schief gehen könnte, wie ich diese getestet haben mit
execve(argv[0], argv, NULL);
und es funktionierte wie erwartet.
Wenn ich auf die API für [sys_execve] (http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html) schaue, bin ich mir nicht sicher, ob die Parameter korrekt sind. Außerdem kompilieren Sie für x64? Wenn ja, sollten Sie Int 0x80 nicht verwenden. –
Ich kompiliere für x64, und mit meinem aktuellen Fortschritt ist der Dateiname Teil korrekt, da jede ausführbare Datei, die ich ausführen möchte, funktioniert. Der Teil, an dem ich festhalte, gibt ihm irgendwelche Parameter. Ich benutze [diese] (http://syscalls.kernelgrok.com/), um zu bestimmen, was ich passieren musste. – LazyShpee