Seite 3 von 4
Verfasst: 18.05.2005 15:31
von AndyX
Aha jemand hat mir erzählt das hätte mit der Stackreservierung zu tun...

Naja egal, Hauptsache ich weiß wie mans anwenden muss...
Aber ich hab der Linker hat jetzt wieder was zu kritisieren:
GoLink hat geschrieben:Assumed entry point (Start) was not found.

Was stimmt da nicht???
Code: Alles auswählen
;====>> ASM Code generated by C^^
format MS COFF
extrn _AllocConsole@0
extrn _Beep@8
extrn _ExitProcess@0
extrn _FreeConsole@0
extrn _Sleep@4
section '.text' code readable executable
start:
MOV eax,dword 324
MOV dword[v_nme],eax
MOV eax,dword 454
MOV dword[v_nmd],eax
MOV eax,dword[v_nme]
CMP eax,dword[v_nmd]
PUSH dword 1000
PUSH dword 200
CALL _Beep@8
MOV eax,dword[v_nmd]
ADD dword[v_nme],eax
MOV eax,dword[v_nmd]
SUB dword[v_nme],eax
MOV eax,dword[v_nme]
IMUL dword[v_nmd]
ADD eax,edx
MOV dword[v_nme],eax
MOV ebx,dword[v_nme]
MOV eax,ebx
MOV ebx,dword[v_nmd]
CDQ
IDIV ebx
MOV ebx, eax
MOV dword[v_nme],ebx
CALL _AllocConsole@0
PUSH 2000
CALL _Sleep@4
section '.data' data readable writeable
v_nme rd 1
v_nmd rd 1
Greetz,
AndyX
Verfasst: 18.05.2005 15:39
von Deeem2031
Da muss irgendwo:
public _WinMain@16
_WinMain@16:
rein.
Verfasst: 18.05.2005 15:49
von AndyX
WinMain hm ja das hab ich andauernd im PB AsmOutput gelesen hab mir aber nix großes dabei gedacht...
Gleich probieren...
EDIT: Der selbe Fehler kommt. So müsste es doch stimmen, steht ja auch im PB ASM, oder stimmts nich?
Code: Alles auswählen
;====>> ASM Code generated by C^^
format MS COFF
extrn _AllocConsole@0
extrn _Beep@8
extrn _ExitProcess@0
extrn _FreeConsole@0
extrn _Sleep@4
public _WinMain@16
section '.text' code readable executable
_WinMain@16:
MOV eax,dword 324
.....................
Greetz,
AndyX
Verfasst: 18.05.2005 21:32
von fsw
Andi,
wenn du wirklich asm lernen willst dann koenntest du dir auch BASM32 ansehen unter yahoo groups.
http://groups.yahoo.com/group/BASM32/
Ist ein kleiner basic zu asm compiler der sich selbst compiliert.
Benutzt zwar goASM und goLINK (also nur auf Windows laeuft), aber zum lernen ist es ja egal mit welchem assembler man rumspielt.
Der vorteil ist das es recht klein ist und ueberschaubar.
Wenn nicht von interesse, dann entschuldige bitte dass ich mich eingemischt habe.
Schoenen tach noch...
Verfasst: 18.05.2005 21:35
von AndyX
Danke für den Vorschlag

aber ich bleib lieber bei FASM. Aber vllt schau ich mir das mal an. thx
PS: Hat irgendwer eine Idee wie ich das Linker Problem lösen kann?
Greetz,
AndyX
Verfasst: 19.05.2005 07:13
von Danilo
AndyX hat geschrieben:Aber ich hab der Linker hat jetzt wieder was zu kritisieren:
GoLink hat geschrieben:Assumed entry point (Start) was not found.
Dein Label ist klein geschrieben (start:) und ist nicht public.
Da Du jetzt _WinMain@16 nimmst, mußt Du das vielleicht
noch an polink übergeben. Hängt halt vom Linker ab.
Bei polink müßte das mit "/ENTRY:_WinMain@16" gehen.
Da vordefinierte Entrypoints auch in der Default-Lib sind,
kann auch ein "/NODEFAULTLIB" nötig sein.
Die Doku zu diesen Werkzeugen (FASM, POLINK etc.) hilft
Dir weiter. Wenn Dich das nicht interessiert hast Du Pech.
In Deinem obigen Code hast Du zwar schon "extrn _ExitProcess@0"
drin, aber der Aufruf dafür am Ende fehlt. Das heißt Dein Programm
wird nach dem Sleep_(2000) nicht beendet, sondern läuft in
undefiniertem Speicher weiter...
Verfasst: 19.05.2005 13:16
von MVXA
Ich erriner mich

.
Das start: war schon richtig. Du musst aber die start: auch exportieren. Das machst du mit "public start"
Verfasst: 19.05.2005 15:12
von AndyX
Danke jetzt wirds mir klarer.

Die Dokus werd ich mir auf jeden Fall mal reinziehen ^^
Hm ich wäre eigentlich nich draufgekommen, dass das Programm im Speicher weiterläuft

Zu DOS Zeiten machte man das mit den BIOS oder DOS Interrupts, und ich dachte das wär in der 32-Bit Welt nicht mehr nötig
JETZT FUNKTIONIERTS!!!!!!!!!!

JUHUUUUUUUUUU!
THX euch allen!!!
Sry für die vielen Rufzeichen aber ich könnt mir nen Haxen ausfreuen
Nur eins würd mich noch interessieren: Polink meint:
POLINK: warning: Multiple '.data' sections found with different flags (0xc0000c0 and 0xc0000040)
Was hat das zu bedeuten?
Greeeeetz,
AndyX
Verfasst: 19.05.2005 16:01
von MVXA
das heißt, dass es in 2 verschiedenen obj Dateien eine Data section gibt. Ist aber nicht unbedingt schlim. Denke ich mir zumindest.
Verfasst: 19.05.2005 17:10
von AndyX
LOL mein "Compiler" erzeugt bei einem Code Console öffnen und beepen eine Exe mit 1356 Bytes und bei einer PB Exe sinds 4608
Ich mache PB Konkurrenz!

ne warn Spaß ^^
Übrigens wer mal mein "Compiler"-Ding sehen will:
http://andyx.an.funpic.de/
xD
Is aber noch ziemlich blöde. Vor allem die Syntax: vergleiche nme nmd

Aber es kann schon bisschen was
^^
Greetz,
AndyX