J'essaie d'appeler une fonction d'assemblage assemblé avec MSNA d'une simple classe de pilote C compilé avec GCC MinGW.Assemblée interfacer des C
J'utilise les commandes suivantes pour compiler et assembler les fichiers.
nasm -f win32 asm_main.asm -o asm.o
gcc -c driver.c -o driver.o
et la commande suivante pour les lier ensemble.
ld.exe asm.o driver.o -L"C:\Windows\SysWOW64" -lkernel32 -luser32 -o app.exe
Je reçois le message d'erreur:
driver.o:driver.c:(.text+0x7): undefined reference to `__main'
Voici mon exemple d'assemblage et le code C
; asm.asm
extern _MessageBoxA, _ExitProcess
section .data
title db "Greeting", 0
message db "Hello World!", 0
section .bss
section .text
global _asm_main
_asm_main:
enter 0, 0
push dword 0
push dword title
push dword message
push dword 0
call _MessageBoxA
push dword 0
call _ExitProcess
mov eax, 0
leave
ret
// driver.c
extern int asm_main();
void main()
{
asm_main();
}
Toute pensée pourquoi je pourrais obtenir cette erreur ? Merci.
MISE À JOUR: j'ai eu mon problème résolu en changeant ExitProcess à _ExitProcess @ 4 et MessageBox à _MessageBoxA @ 16 et la liaison avec gcc.
J'ai essayé gcc et a obtenu un autre ensemble d'erreurs: c:/MinGW/bin /../ lib/gcc/mingw32/4.9.3 /../../../ libmingw32.a (tlsthrd.o .) :(texte + 0x218): undefined reference to 'InitializeCriticalSection @ 4' c:/MinGW/bin /../ lib/gcc/mingw32/4.9.3 /../../../ libmingwex.a (. misc.o) :(texte + 0x67): undefined reference to 'InitializeCriticalSection @ 4' – Ian
@Ian, vous devez alors ajouter un lien vers win32 ou quelque chose. Essayez d'ajouter '-lwin32'. Si ça ne marche pas, c'est au moins un indice! Il vous manque une bibliothèque Windows fondamentale. –