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 :
j'obtiens : test.obj:test.asm.text+0xd): undefined reference to `GetCurrentDirectoryW'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci d'avance pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Bonne journée
Partager