[Surnaturel] Une fonction qui marche en débug, pas en release
Ben voilà, tout est dans le titre. J'ai une fonction qui marche en mode debug, pas en mode release. La voilà:
Code:
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;
} |
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:
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 |
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 ?