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