Autor Thema: Problem mit NASM Tutorial  (Gelesen 5082 mal)

Buster

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« am: 20. February 2005, 13:42 »
Sers.

Ich bin gerade am Durchwerkeln eines NASM Tutorials, welches mir schon bei der ersten Übung auf Seite 29 Probleme bereitet (s. E-Book). Das Assemblieren der ASM Dateien bzw. das Kompilieren der C Dateien bereitet keine Probleme, ebenfalls das Linken der Objektdateien, nur die Executable will nicht wie es sein sollte. Als Fehler lese ich beim Ausführen immer dieses: "first.exe hat ein Problem festgestellt und muss beendet werden." Ähm, lol?! Kann es bitte einer selbst mal ausprobieren, ob dies nur bei mir der Fall ist oder liegt da ein Fehler im Tutorial vor?

Hier noch die Dateien, die ihr benötigt.

Danke im Voraus.

//edit#1: So, hab die Fehlerberichterstattung mal umgekrempelt in XP, jetzt gibt er mir wenigstens schon eine etwas einleuchtendere Fehlernachricht zurück, welche ungefähr so lautet: "Die Anweisung in "0x004013a2" verweist auf Speicher in "0x????????"...". Darauf hab ich mal das Programm durch W32Dasm gejagt, nen GOTO zu dieser Codeadresse durchgeführt und siehe da es liegt an der Anweisung LEAVE, d.h. irgendwas mit dem Stack scheint nicht so in Ordnung zu sein. Kann mir wer dabei weiterhelfen? Vielleicht liegt es auch an der ENTER Anweisung, weil dort zwei Nullen eingetragen wurden und dies deshalb bedeutet, dass überhaupt kein Speicher für den Stack eingerichtet wird, jedoch werden PUSHs und POPs angewandt? ô_Ô Kann es daran liegen?

//edit#2: Wenn ich den Stack per ENTER 100h, 0 auf 256 Bytes vergrößere gibt er mir ne "unbekannte Softwareausnahme" zurück. Also daran kann es nicht liegen. Ich denke sowieso, dass der GCC beim Linken schon nen eigenen Stack reserviert für das Programm. Irgendwelche Vorschläge?

.:Buster
F***ed Up Beyond All Recognition!

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. February 2005, 21:14 »
Bist du sicher, dass die Übung für Windows ist? Es könnte auch eine normale Binärdatei sein, die nicht unter einem gänigen Betriebssystem läuft.

Buster

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 20. February 2005, 21:34 »
Ja, ich bin mir da eigentlich ziemlich sicher, dass es für Linux _und_ Windows ist. ;)

//edit: Juhu! Ich hab's endlich selbst geschafft!

Anleitung:

1) nasmw -f win32 datei.asm
2) mingw32-gcc -c driver.c -o driver.obj
3) mingw32-gcc -o first.exe datei1.obj datei2.obj dateiN.obj

Was habe ich geändert?

1) win32 statt coff Format.
2) mingw32-gcc statt gcc Compiler.

Klingt auch logischer unter Windoof.

Jetzt kann ich endlich weiter fortschreiten im Tutorial. Sorry für die Umstände. :D

.:Buster
F***ed Up Beyond All Recognition!

 

Einloggen