Ben voilà, tout est dans le titre. J'ai une fonction qui marche en mode debug, pas en mode release. La voilà:
En fait, lorsqu'on regarde le code assembleur généré, le compilateur fait comme si ebp et esp étaient égaux (ce qui n'est pas le cas):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (TEST() == 0x12345678) MessageBox(NULL, "Erreur", "", MB_OK); unsigned long TEST(void) { unsigned long a; a = 0x12345678; _asm { mov a,esi } return a; }
Il semblerait donc que ce soit un problème de convention d'appel. Mais j'ai essayé de la déclarer en pascal, stdcall, cdecl, etc... Rien n'y fait. Quelqu'un aurait-il une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 push esi push ecx mov [esp], 0x12345678 mov [ebp+0x00],esi mov eax,[esp] pop edx pop esi ret
Partager