Rahmen für Assembler-Programm

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
mampfi
Beiträge: 1981
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Rahmen für Assembler-Programm

Beitrag von mampfi » 28.10.2024 16:22:59

Im Rahmen meiner Wiederbeschäftigung mit Assembler

Ich habe festgestellt, dass in dem Assembler-Lehrbuch Programme mit Fehlern enthalten sind, siehe Bild.

Hat sich jemand in letzter Zeit mit Assembler unter (debian-)linux befasst?

Ich würde aus dem Gedächtnis schöpfen, dazu bräuchte ich aber einen "Rahmen" für ein funktionierendes Programm.

5112

Damit Ihr keinen Augenkrebs kriegt, Auschnitt aus der Fehlermeldung: "Undefined reference to ´main
Es gibt viele Foren und eine Welt ausserhalb

Benutzeravatar
Livingston
Beiträge: 1816
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Rahmen für Assembler-Programm

Beitrag von Livingston » 29.10.2024 11:31:48

Sieht ganz danach aus, als fehlten dem Linker ein paar Informationen, was er mit dem assemblierten Object-Code machen soll.
Generell erzeugt der Assembler nicht aus dem Stand heraus lauffähigen Code, sondern Object-Code, der ein wenig Unterstützung vom Linker ld erhält. Das ist notwendig, weil das Betriebssystem Dein Programm irgendwohin lädt und der Linker nun sämtliche Adressen innerhalb Deines Programms auf die realen Speicherorte anpassen muss.
Das fängt schon mal damit an, dass er wissen muss, wo der Startpunkt Deines Programms liegt. Nur weil Du etwas "_start" genannt und es global zugänglich gemacht hast, heißt das nicht, dass der Linker die richtigen Schlüsse zieht. Ihm muss das Symbol "_start" als tatsächlicher Startpunkt bekannt gemacht werden.

Ich würde an Deiner Stelle erst mal auf sasm verzichten, damit Du die Basics auf der Kommandozeile lernen kannst. Ich halte das für wichtig, damit Du weißt, was sasm im Hintergrund für Dich tut, und damit Du sasm die notwendigen Einstellungen verpassen kannst. Also erst mal Deinen Code mit nasm assemblieren, und wenn das fehlerfrei klappt, das File, das dabei herauskommt, mit ld bearbeiten.
Leider gibt's keinen einfacheren Weg. Ein wenig Hintergrundinfos musst Du Dir anlesen. Keine Ahnung, warum Dein Buch auf diese Fallstricke nicht eingeht. Tipps gab's ja schon in dem anderen Thread, den Du zum Assembler aufgemacht hast.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

mampfi
Beiträge: 1981
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: Rahmen für Assembler-Programm

Beitrag von mampfi » 01.11.2024 15:14:41

Dass Programme gelinkt werden hatte "fast" schon vergessen.

Mit ganz komplizierten Make-Files bzw. Aufrufefn mag ich ehrlich gesagt nicht mehr arbeiten,

liegt wohl daran, dass ich mit Turbo-Pascal sozialisiert worden bin und dass gcc, g++ ja ganz "einfach" kompilieren. ;-)

Ich hab mittlerweile eine "default.asm" gefunden, wenn ich die Beispiel-Programme da einbaue werden die Beispiel-Programme ausgeführt,

Nur der Debugger funktioniert leider nicht.
Mit einem printf kann leider unterwegs keine Werte zum Verständnis anzeigen. ;-)
Es gibt viele Foren und eine Welt ausserhalb

Antworten