Erreur de linkage / kernel32
Bonjour,
Je voudrais réaliser un programme en assembleur faisant appel à des fonctions de kernel32, en l’occurrence GetCurrentDirectory().
J'utilise nasm, je me suis renseigné sur le nom exacte de la fonction en allant vérifier la table d'export de kernel32.dll (elle exporte deux versions : GetCurrentDirectory(W/A)).
Mais pour le moment impossible pour le linker de trouver cette fonction... Voici le script de base que j'utilise :
Code:
1 2 3 4 5 6 7 8 9
|
@echo off
set fileName=%1
set asmFileName=%fileName%.asm
set objFileName=%fileName%.obj
set exeFileName=a.exe
"C:\Program Files (x86)\SASM\NASM\nasm.exe" -f win32 %asmFileName%
"C:\MinGW\bin\ld.exe" %objFileName% -lmsvcrt -lkernel32 -entry=_main -submsystem=console -o %exeFileName% -L "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\arm"
@echo on |
j'obtiens : test.obj:test.asm:(.text+0xd): undefined reference to `GetCurrentDirectoryW'
J'ai déjà essayé pas mal de chose...
J'ai également tenter de passer par le linker de visual studio, j'obtiens l'erreur suivante :
Code:
1 2 3 4 5
|
test.obj : error LNK2001: unresolved external symbol _printf
test.obj : error LNK2001: unresolved external symbol GetCurrentDirectoryW
test.obj : error LNK2001: unresolved external symbol _malloc
test.exe : fatal error LNK1120: 3 unresolved externals |
Voici le code, il sans doute faux, mais je n'ai pas trop eu le temps de le test pour le coup (sauf avec du code simple permettant d'afficher du texte, j'arrive donc à aller chercher les fonctions de bases telles que printf.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
global _main
extern _printf
extern _GetCurrentDirectoryW
extern _malloc
section .data
printfFormat db "%d bytes\n", 0
dirSize dd 0
section .text
_main:
call _getCurrentDirSize
ret
_getCurrentDirSize:
xor eax, eax
push 0
push 0
call _GetCurrentDirectoryW
push eax
push printfFormat
call _printf
ret |
Merci d'avance pour votre aide !
Bonne journée