so, hier gehts darum wie ihr mit nasm und alink euren code assemblieren + linken könnt! (windoof)
was benötigt wird: nasm, alink, win32.lib, win32n.inc... gibts alles

!
gehen wir einfach mal von einer simplen anwendung aus die ne messagebox anzeigen soll und den process mit terminateprocess beendet.
als erstes sollte man die externen symbole definieren
Code:
extern MessageBoxA
extern GetCurrentProcess
extern TerminateProcess
durch die win32.lib ist das auch genau so richtig!
zunächst wäre der entrypoint wichtig, der muss global definiert sein:
und der code
Code:
start:
push 0
push szTitle
push szMessage
push 0
call MessageBoxA
add esp, 0x0C
call GetCurrentProcess
push 0
push eax
call TerminateProcess
add esp, 0x08
da das so nicht reichen würde, hier nochmal die .data section:
Code:
szTitle db 'MessageBox',0
szMessage db 'asm rox!',0
jetz gehts zu dem eigentlichen part was ich hier posten wollte
sinnvoll wäre es das ganze mit nasm zu assemblieren:
Code:
nasm -fwin32 messagebox.asm -o messagebox.obj
das -fwin32 ist das output format, in dem fall win32 object files!
das -o messagebox.obj ist die output datei.
messagebox.asm ist dann die input datei!
um das ganze zu linken:
Code:
alink -oPE -o messagebox.exe -entry start -subsys console messagebox.obj WIN32.LIB
-oPE ist hier das output format
-o messagebox.exe ist die output datei!
-entry start gibt den entrypoint an (hier start)
-subsys console sorg dafür dass zum starten die console angezeigt wird
die letzten parameter sind die inputdateien die zusammengelinkt werden (WIN32.LIB für die imports)
um eine dll zu erstellen muss noch der parameter -dll angehängt werden (-subsys console is dann unnötig)
alle weiteren parameter bekommt man mit der option -h
ich sollte noch anmerken dass es sinnvoller ist den prozess "anders" zu beenden
warum man grade asm verwenden sollte? kleines beispiel: mein c++ code hatte ~700kb, in asm hat der gleiche code nurnoch 4kb

es fallen also die (in meinem fall) unnötigen funktionen der crt weg!