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().
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);
}
Avec le debugger, je visualise cela en faisant un "watch":
AddrSleepFcn = (SLEEP_FCN)0x401f98 <Sleep@4>
+Sleep
0x7c802446 <Sleep>
J'aurais pensé que AddrSleepFcn aurait la même valeur que Sleep mais ce n'est pas le cas. Sauriez vous pourquoi?
D'ailleurs que signifie ce <Sleep@4>?

Evidemment l'appel à AddrSleepFcn(2000) fonctionne bien.

Merci

Nicolas