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
zunächst wäre der entrypoint wichtig, der muss global definiert sein:
Code:
global start
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
Code:
szTitle db 'MessageBox',0 szMessage db 'asm rox!',0
sinnvoll wäre es das ganze mit nasm zu assemblieren:
Code:
nasm -fwin32 messagebox.asm -o messagebox.obj
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
-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






