Entwickler-Ecke

Algorithmen, Optimierung und Assembler - [MASM] *.obj Dateien linken: 16bit klappt, 32bit nicht


Leuchtturm - Di 25.12.07 20:23
Titel: [MASM] *.obj Dateien linken: 16bit klappt, 32bit nicht
Hi,
erstmal sorry falls ich in der falschen Sparte poste.
Ich habe also diese asm-Datei assembliert:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
.MODEL Small                    
.STACK 100h                     
.DATA                           
  Meldung DB "Hallo Welt$"        
.CODE                           
Start:  mov ax,@data            
        mov ds,ax               
        mov dx, OFFSET Meldung  
        mov ah,09h
        int 21h                 
        mov ah, 4Ch
        int 21h                 
        END Start

Danach habe ich eine hallo.obj Datei.
Diese versuche ich nun mit dem MASM Linker für 32 bit zu linken.
Fehler hat folgendes geschrieben:
LINK: error: Segment reference in fixup record
hallo.obj: fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

Mit dem 16bit-MASM-Linker funktioniert es komischerweise.
Könnte mir jemand sagen was ich falsch mache bzw was an dem Code falsch ist.
Vielen dank im voraus.
mfG

Leuchtturm

PS: Der Code ist aus dem Buch Assembler - Grundlagen der Programmierung [http://www.amazon.de/Assembler-Grundlagen-Programmierung-Joachim-Rohde/dp/3826614690/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1198606868&sr=8-2]


Leuchtturm - Mi 26.12.07 22:21

Sowie ich das hier [http://www.happy-security.de/?modul=forum&action=topic&id=648&quotereply=5829&start=00] verstanden habe, funktioniert dieses Programm nur mit einem 16bit Linker.


DrRzf - Mi 26.12.07 23:26

Ich bin zwar nicht der ober Assembler Meister (reicht grad um mal nen schlechtgemachten kopierschutz zu umgehn :-) ) aber was mir hier seltsam vorkommt:


Quelltext
1:
int 21h                    


ist das nicht eine Dos interruptroutine um text auszugeben ?
Dos = 16 bit system
wie passt das dann zu 32 bit ?

hab ich da grad nen Denkfehler ?


Reinhard Kern - Do 27.12.07 04:23

user profile iconDrRzf hat folgendes geschrieben:
ist das nicht eine Dos interruptroutine um text auszugeben ?
Dos = 16 bit system


Ergänzung: es gibt in 32 bit auch kein "Model Small", das ist 16bit Real Mode.

Gruss Reinhard


DrRzf - Do 27.12.07 04:47

hatte ich doch keinen Denkfehler ?


Leuchtturm - Do 27.12.07 11:10

Vielen Dank.
Ich habe das genau so gemacht wie es in dem Buch beschreiben war und mich deshalb gewundert warum das nicht funktioniert.


Reinhard Kern - Do 27.12.07 19:21

user profile iconLeuchtturm hat folgendes geschrieben:
Vielen Dank.
Ich habe das genau so gemacht wie es in dem Buch beschreiben war und mich deshalb gewundert warum das nicht funktioniert.


Hallo,

nach dem Inhaltsverzeichnis ist das Buch auf dem Stand MSDOS mit Windows 3.11, 32 bit-Fragen werden kurz auf den letzten Seiten behandelt. Das kann man für eine Einführung als Vorteil oder als Nachteil sehen, aber du brauchst sicher ein System, auf dem DOS wenigstens gut emuliert wird. Möglicherweise nützt dir das Buch unter Vista nicht mehr viel, ganz sicher nicht unter 64bit.

Ich habe genauso (echte) Programme geschrieben, aber das war vor 25 Jahren oder so.

Gruss Reinhard


Leuchtturm - Do 27.12.07 20:44

user profile iconReinhard Kern hat folgendes geschrieben:

Hallo,

nach dem Inhaltsverzeichnis ist das Buch auf dem Stand MSDOS mit Windows 3.11, 32 bit-Fragen werden kurz auf den letzten Seiten behandelt. Das kann man für eine Einführung als Vorteil oder als Nachteil sehen, aber du brauchst sicher ein System, auf dem DOS wenigstens gut emuliert wird. Möglicherweise nützt dir das Buch unter Vista nicht mehr viel, ganz sicher nicht unter 64bit.

Ich habe genauso (echte) Programme geschrieben, aber das war vor 25 Jahren oder so.

Gruss Reinhard


Das Buch in der zweiten Auflage erklärt im 1.Teil die Gundlagen von Assembler unter DOS.
Im 2.Teil wird dann auf die Windowsprogrammierung mit ASM eingegangen. Und danach über optimierungen und reverse engineering gesprochen :wink:

Außerdem benutze ich WinXP und das Porgramm läuft in der Console ganz gut.