Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [STACK] nasm exit 100



RedNuX
21-02-2005, 19:48
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 auf


Dazu 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?

RedNuX
22-02-2005, 12:52
Ich habe noch an ieiner anderen 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