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 :
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;
}
Voici le code assemblé :

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