Wie kann ich Array von Strings als Parameter übergeben, um in Assembler zu funktionieren? Zum Beispiel können sagen, ich will execve() Funktion aufrufen, die wie folgt aussieht:Wie man Array von Strings als Parameter an die Funktion übergeben?
int execve(const char *filename, char *const argv[], char *const envp[]);
so dass ich dies tun:
test.asm
format elf executable
entry main
main:
mov eax, 11 ; execve - executes program
mov ebx, filename ; label name is address of string variable
mov ecx, args ; label name is address of array of strings?
mov edx, 0 ; NULL
int 80h
mov eax, 1 ;exit
int 80h
ret
filename db '/bin/ls', 0 ; path to program
args db '/bin/ls', 0, '.', 0, 0 ; array should end with empty string to
; indicate end of array
Make-Datei
all:
~/apps/fasm/fasm ./test.asm
Aber wenn ich mein Programm ausführen execve() fehlschlägt angeforderte Programm ausführen und strace ./test zeigt diese mes sage:
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
Wie "Args" Variable ordnungsgemäß übergeben, um Funktion auszuführen?
Danke :)
Um herauszufinden, wie etwas gemacht wird, schreiben Sie es in C und sehen Sie sich die Compiler-Ausgabe an. –
Verwenden Sie 'lea ebx, [Dateiname]', um die Adresse eines Labels in ein Register zu verschieben. – sivizius