Bonsoir,
Un titre peut être pas très explicite mais je m'explique:
Je cherche à comprendre comment est gérée une fonction importée d'une bibliothèque kernel32 (par exemple) au niveau de l'exécutable.
Au moment de l'exécution, les DLLs requises sont chargées puis les adresses de fonctions importées sont stockées dans l'IAT. OK!
Je me fais un petit programme tout simple avec l'utilsation de la fonction Sleep().
Avec le debugger, je visualise cela en faisant un "watch":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef void (*SLEEP_FCN)(DWORD dwMilliseconds); int main(void) { SLEEP_FCN AddrSleepFcn = (SLEEP_FCN)Sleep; AddrSleepFcn(2000); Sleep(2000); }
J'aurais pensé que AddrSleepFcn aurait la même valeur que Sleep mais ce n'est pas le cas. Sauriez vous pourquoi?AddrSleepFcn = (SLEEP_FCN)0x401f98 <Sleep@4>
+Sleep
0x7c802446 <Sleep>
D'ailleurs que signifie ce <Sleep@4>?
Evidemment l'appel à AddrSleepFcn(2000) fonctionne bien.
Merci
Nicolas
Partager