Wo steckt der Wurm drin?
-
hi Leute

ich hab ein ganz kurzes Programm, welches vielleicht unsinnig
codiert ist (es geht einfacher). Dies hat jedoch nur einen Übungszweck.Das Prog fragt nach einer eingabe (OK)
Das Prog verlangt eine eingabe (speicherzgriffsfehler)
Dann soll es die Eingabe wider ausgeben ... (nicht geprüft)Hier der code (nasm/linux):
global _start section .data msg1 db 0x0A,"Bitte geben Sie einen Text ein!",0x0A,"> ",0x0 ; 36 section .text _start: push dword msg1 push dword 36 call ausgabe pop eax pop eax sub esp,256 push dword esp push dword 256 call eingabe pop eax ; enthaelt die 100 pop ebx ; enthaelt die addrese vom Buffer auf dem stack push dword ebx push dword eax call ausgabe pop eax pop eax add esp,256 ; vernichte den Buffer ende: mov eax,1 xor ebx,ebx int 0x80 ausgabe: push ebp mov ebp,esp mov eax,4 ; ssize_t write(int fd, const char *buf, size_t count); mov ebx,1 mov ecx,[ebp+12] mov edx,[ebp+8] int 0x80 pop ebp ret eingabe: push ebp mov ebp,esp mov eax,3 ; ssize_t read(int fd, void *buf, size_t count); mov ebx,0 mov ecx,[ebx+12] mov edx,[ebx+8] int 0x80 pop ebp retHab schon herausgefunden, dass der Fehler (Speicherzugriffsfehler) immer
in der function "eingabe" kommt. Wie man sieht will ich einen Buffer auf
den stack anlegen, bevor ich ihn übergebe.Wo steckt der Wurm drinn?
Für eure Antwort wäre ich sehr dankbar

Gruss

-
Hi.
Beim Programmieren von Würmern/Trojanern/Viren usw. wird dir hier mit Sicherheit nicht geholfen.
-
gain schrieb:
Hi.
Beim Programmieren von Würmern/Trojanern/Viren usw. wird dir hier mit Sicherheit nicht geholfen.
LOL das ist doch nur eine Redewendung

(bedeutet so viel wie: "Wo ist der Fehler?")
sieht das da oben etwa wie ein wurm aus
Wäre nett wen Du Dir vorerst meine Frage durchlesen würdest bevor Du mir was vorwirfst. Jedoch ich sehe das wie Du

Gruss

-
Schaut eigentlich ganz gut aus. Ich hab jetzt nicht gecheckt, ob wirklich die richtigen Register mit den richtigen Werten geladen werden. Ich hoffe, das hast du schon überprüft.
Das push esp würd ich nicht machen. Ich kann mich dunkel erinnern, dass verschiedene Prozessoren hier verschiedene Ergebnisse liefern - das war zwar irgendwo in den 286er-Zeiten, aber trotzdem. Sicher ist sicher. Aber selbst wenn es nicht das tut, was du erwartest, sollte es erst bei der Ausgabe crashen (weil dann der gepushte Stackpointer überschrieben ist).
-
Hi vielen Dank für Deine Antwrt

Ringding schrieb:
Ich hab jetzt nicht gecheckt, ob wirklich die richtigen Register mit den richtigen Werten geladen werden. Ich hoffe, das hast du schon überprüft.
Yo, habe ich gemacht

Ringding schrieb:
Das push esp würd ich nicht machen. Ich kann mich dunkel erinnern, dass verschiedene Prozessoren hier verschiedene Ergebnisse liefern - das war zwar irgendwo in den 286er-Zeiten, aber trotzdem. Sicher ist sicher.
Nun das habe ich bissher immer gemacht, und hatte dammit eigentlich nie Probleme.
Hab in der Literatur zu neuen cpus nachgeschaut, die scheinen es auch zu verwenden.Ringding schrieb:
Aber selbst wenn es nicht das tut, was du erwartest, sollte es erst bei der Ausgabe crashen (weil dann der gepushte Stackpointer überschrieben ist).
Weis leider nicht genau was Du meinst

Habs nun genauer Untersucht: Das ganze crasht dort (in "eingabe") vor dem "int 0x80"also bei den Zeilen:
mov ecx,[ebx+12] mov edx,[ebx+8]Doch was die Ursache dessen ist weis ich leider nicht

Soweit: Danke

-
Ich schätz mal, dass du statt ebx ebp meinst. ebx belegst du doch erst mit 0. Klar, dass dann ein Zugriffsfehler kommt.
-
@YASC
Vielen dank
das ist es tatsächlich gewesen. Jetzt funktioniert alles wie es soll

Diese Verwechslung hab ich nicht zum ersten Mal gemacht
vielen Dank für Eure Hilfe

Auf dem Board sind doch die kompetentesten Leute
Gruss
