Salut,
J'ai besoin d'être sûr qu'un bout de code C que j'utilise soit compilé d'une certaine façon, notamment je veux éviter certaines optimisations.
Mon idée est d'incorporer un code compilé comme je veux dans un bloc "asm" de mon code C. J'ai récupéré le code assembleur de ma fonction mais je ne sais pas comment le présenter pour obtenir l'équivalent de ma fonction. La simple recopie des instructions dans le bloc asm m'a fait des erreurs car il ne connait pas les identifiants des variables que j'utilise.
Voici ma fonction de départ :
Voici le code assemblé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 unsigned int MyFunction(UINT16 * ptr) { DWORD* p_ADDR = (DWORD*)(ptr); pXPCMessageBoxType pMsgBox = (pXPCMessageBoxType)(*p_ADDR); return pMsgBox->header.readCursor; }
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
29
30
31
32
33
34
35
36
37
38
39 PUBLIC _MyFunction ; Function compile flags: /Odtpy _TEXT SEGMENT _p_ADDR$ = -8 ; size = 4 _pMsgBox$ = -4 ; size = 4 _ptr$ = 8 ; size = 4 _MyFunction PROC ; 286 : { 00c70 55 push ebp 00c71 8b ec mov ebp, esp 00c73 83 ec 08 sub esp, 8 ; 287 : DWORD* p_ADDR = (DWORD*)(ptr); 00c76 8b 45 08 mov eax, DWORD PTR _ptr$[ebp] 00c79 89 45 f8 mov DWORD PTR _p_ADDR$[ebp], eax ; 288 : pMessageBoxType pMsgBox = (pMessageBoxType)(*p_ADDR); 00c7c 8b 4d f8 mov ecx, DWORD PTR _p_ADDR$[ebp] 00c7f 8b 11 mov edx, DWORD PTR [ecx] 00c81 89 55 fc mov DWORD PTR _pMsgBox$[ebp], edx ; 289 : return pMsgBox->header.readCursor; 00c84 8b 45 fc mov eax, DWORD PTR _pMsgBox$[ebp] 00c87 8b 00 mov eax, DWORD PTR [eax] ; 290 : } 00c89 8b e5 mov esp, ebp 00c8b 5d pop ebp 00c8c c3 ret 0 _MyFunction ENDP _TEXT ENDS
Partager