Esto es muy especifico de la herramienta que uses, FASM por lo que veo. Yo no puedo ver como hacerlo aca en el manual:
http://flatassembler.net/docs.php?article=manual#2.4format PE GUI 4.0 LIB fue mi primera intuicion pero no funciona y obviamente no figura ahi.
Agrego, es posible generar archivos objeto COFF y con VC++ entonces generar una libreria estatica, esto es algo muy basico que apenas ensambla, enlaza y funciona pero tendras que hacer mas.
Tu codigo para .obj:
format MS COFF
;entry DllEntryPoint
include 'win32a.inc'
cadena db 'asd',0
section '.text' code ;readable executable
proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
mov eax,TRUE
ret
endp
public MiFuncion
public MiFuncion as '_MiFuncion'
proc MiFuncion
invoke MessageBox,HWND_DESKTOP,cadena,cadena,MB_OK
ret
endp
section '.idata' data ;Mimport data ;readable writeable
library user,'USER32.DLL'
extrn '__imp__MessageBoxA@16' as MessageBox:dword
; import user,\
; MessageBox,'MessageBoxA'
section '.edata' data ;export data readable
; export 'midll.dll',\
; MiFuncion,'MiFuncion'
section '.reloc' data; fixups data discardable
fasm faLib.asm generara faLib.obj
lib faLib.obj generara faLib.lib
Un ejemplo para llamar a la libreria (
MASM):
.386
.model flat, stdcall
MiFuncion PROTO C:DWORD
.code
main:
call miFuncion
ret
end main
ml call.asm faLib.lib user32.lib