[sTACK] NASM exit 100
-
Hallöchen,
ich halbe n kleines Prob und zwar möchte ich einen exit(100) aufruf in meiner Linuxkonsole erzeugen und bekomme da irgendwas nicht richtig hin und stehe bestimmt auf der Leitung.exit100.s
pinky@labor tmp $ cat exit100.s BITS 32 mov eax, 0x64 push eax mov eax, 0x01 push eax int 0x80
ihr seht, ich:
- lade den Wert 100 in eax
- schiebe es auf den Stack
- lade den Syscallwert 1 in eax
- schiebe es auf den Stack
- rufe den interrupt 80 aufDazu verwende ich noch n kleines Progrämchen. Dieses liest die Binärdatei ein, verbiegt die Rücksprungadresse auf den Puffer, und führt es damit aus.
prog.c
#include <stdio.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> int run(char *code) { int ret; puts("running code..."); *(((unsigned*)&ret) + 2) = (unsigned)code; return 0; } int main(int argc, char *argv[]) { int fd, bytes; char code[1024]; if (argc < 3) { fprintf(stderr, "usage: %s --run <file>\n", argv[0]); return 1; } if ((fd = open(argv[2], O_RDONLY)) < 0) { perror("open() failed"); return 1; } if ( (bytes = read(fd, code, 1024)) < 0) { perror("read() failed"); return 2; } close(fd); printf("%i bytes read.\n", bytes); if (!strcmp(argv[1], "--run")) run(code); return 0; }
Allerdings funzt da irgendwas nicht wie es sollte.
Ausgabe:
pinky@labor tmp $ nasm -o exit100 exit100.s pinky@labor tmp $ ./tool --run exit100 14 bytes read. running code... pinky@labor tmp $ echo $? 244 pinky@labor tmp $
Eigentlich sollte statt einer blöden 244 ne richtig schöne 100 stehen ...
Hat wer zufällig eine Idee?
-
Soweit ich weis werden unter linux
die Parameter von Systemaufrufen in
den Registern übergeben und nicht
am Stack.
-
Das sehe ich auch so.
-
ICh habe noch an einer 2ten Idee gearbeitet aber diese funktioniert auch nicht.
Idea_2:
exit100_2.s
pinky@labor tmp $ cat exit100_2.s .section .data .section .data .globl _start _start: movl $1, %eax movl $100, %ebx int 0x80
OUTPUT:
pinky@labor tmp $ as exit100_2.s -o exit100_2.o pinky@labor tmp $ ld exit100_2.o exit100_2 pinky@labor tmp $ ./exit100_" Segmention fault pinky@labor tmp $ echo $? 139