Anfängerfragen

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

Anfängerfragen

Beitragvon Chrisimo » Donnerstag 12. Oktober 2006, 11:40

Hallo Leute,

ich habe folgende Fragen zum Programmieren mit Assembler bzw. zur Ausführung von Programmen, Verwaltung von Speicher, etc. im Allgemeinen.

Ich habe mit nasm von Sourceforge besorgt und OllyDbg als Debugger, um mal einen Einblick zu bekommen, wie ein von mir geschriebenes simples Programm abläuft. Leider wird zum Ausführen immer die ntvdm geladen und ich hab dann den ganzen Kram auch mit im Debugger und habe Schwierigkeiten, meinen Code zu finden (z.B. Stringkonstanten kann ich erst finden, wenn das Programm schon läuft - müssten die nicht auch schon vorher irgendwo stehen?). Kann ich die ntvdm irgendwie umgehen? Ich möchte einen möglichst kleinen Code debuggen, damit ich nachvollziehen kann, was passiert.

Dann würde mich interessieren, wie das mit dem Stack oder dem Speicher allgemein läuft. Wenn ich das Programm starte - was passiert genau? Wird einfach das ganze Programm irgendwo in den Speicher geschrieben?
Ich kann ja Stacksegmente angeben. Wann werden diese bei der Programmausführung erstellt?

Ihr solltest vielleicht gar nicht erst versuchen, meine Fragen direkt zu beantworten, denn dann kommen nur noch mehr ;). Ich habe mir einige Tutorials rausgesucht, die mir auch schon weitergeholfen haben hinsichtlich Register,Befehle,Speicheraufteilung, aber eben nichts zum eigentlichen Programmablauf (Ich kann ein Programm zwar disassemblieren, aber da steht dann auch nirgendwo wann der Stack eingerichtet wird - oder zumindest kann ich es nicht erkennen.

Mich würde also in erster Linie interessieren, wo ich an Tutorials rankomme, die diese Themen behandeln.

Vielen Dank!
Chrisimo
Newbie
 
Beiträge: 1
Registriert: Donnerstag 12. Oktober 2006, 11:28

Beitragvon crack » Montag 16. Oktober 2006, 19:47

Soweit mir bekannt, wird beim Start von Konsolenanwendungen der NTVDM automatisch geladen, da dieses überhaupt die Konsole zur Verfügung stellt.
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon CDW » Freitag 20. Oktober 2006, 20:00

der NTVDM automatisch geladen

nur bei 16-bit ;)
Zu den Fragen.
Ist relativ umfangreich.
Auch je nach dem was du für Programme meinst: 16-bit Exe oder COM?
Es gibt auch 32-Bit Executables. Eine Executable besitzt einen Header, in dem die ganzen Angaben stehn. Aber frag mich nichts zu dem alten Format ;). Bei 32-Bit "modernem" PE-Format stehen jedenfalls alle relevanten informationen drin - welche Sectionen (Abschnitte) wie groß im Speicher werden, an welcher Speicheradresse soll das Programm "beginnen", wie groß Stack usw sein sollen (ist recht umfangreich, bei interesse könntest Du nach PE-Tutorials ausschau halten. Eine Einführung habe ich dazu zwar auch schon geschrieben, diese gilt allerdings eher dem Reversengineering Bereich). Wenn man dann ein Programm startet, wertet der Windowseigene "Loader" erstmal diese Parameter aus. Er lädt (mappt) die Executable in den Speicher, führt initialisierungen durch, füllt Import-Tabelle aus und erst wenn er damit fertig ist, springt er zum Codeanfang des Programms. In groben Zügen könnte das auch in DOS ablaufen. Aber sicher bin ich mir da nicht - wenn überhaupt, dann programmiere ich ab und zu aus Spass an der Freude COM-Programme (weil sie so schön klein sind). Und diese sind recht simpel gestrickt.

Was allgemein Speicherverwaltung angeht: welche "Stufe" ? Normalerweise kümmert sich das OS um die Verwaltung. Auch hardwaremäßig gibt es die MMU (Memory Management Unit). All das sorgt aber in erster Linie dafür, dass der Programmierer den virtuellen Speicher nutzen kann (ohne Kenntnisse über den Physischen zu haben) und damit sich die Programme nicht in die Quere kommen. Alles weitere geschiet so zu sagen über das OS - Speicheranforderungen und Freigaben etc. Es sei denn, Du meist wieder die DOSe - da habe ich k.A wie es abläuft (so ein archaisches System tu ich mir nicht mehr an - lieber lerne ich (wenn übehaupt) dann etwas über AmigaOS usw, welches schon 1985 32-Bit Multitaskinfähig war und all das hatte, was Win95 als Neuheit verkaufte ;) )

NTVDM ist ja der Wineigene Emulator. Ich finde es nicht gerade günstig, mit Olly einen Emulator zu betrachten ;). Also entweder einen DOS-Debugger suchen (Wineigener "Debug", wenn es SM-mäßig sein soll ;) ) oder auf 32-Bit umsteigen.
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17


Zurück zu Assembler

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron