Bonjour,
J'aimerais passer l'adresse d'une variable STRUCTURE à une PROC et modifier dans cette proc certaines zones de la Stucture.
Imaginons une structure comme celle ci
Je connais 2 façons d'accéder à une zone d'une structure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 API_ STRUCT Module DWORD ? APIName DWORD ? APIaddr DWORD ? API_ ENDS mystruct1 API_ <> mystruct2 API_ <>
Code : Sélectionner tout - Visualiser dans une fenêtre à part mov eax,mystruct1.ModuleMon problème est que j'aimerais appeler une PROC avec en parametre l'adresse de la variable Structure pour pouvoir modifier DANS la PROC certaines zones de la structure !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mov ebx, offset mystrcut1 mov eax,[ebx].API_.Module
Par exemple quelque chose comme cela
Ici cela ne fonctionne pas car [Structin] est une addresse relative au stack et non pas l'addresse de ma structure
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 Api_ STRUCT APIADDR DWORD ? Api_ ENDS .data info1 Api_ <> info2 Api_ <> .code invoke GetFnAddr,CTEXT ("user32.dll"),CTEXT ("MessageBoxA"), OFFSET info1 invoke GetFnAddr,CTEXT ("Kernel32.dll"),CTEXT ("OpenFile"), OFFSET info2 GetFnAddr Proc ModuleIn :DWORD, APIin:DWORD, Structin:DWORD Invoke GetModuleHandle,ModuleIn Invoke GetProcAddress,EAX,APIin mov [Structin].API_.APIADDR,eax Ret GetFnAddr endp
Le seul moyen que j'ai trouvé est de ne PAS passer l'adresse de ma structure comme variable et d'utiliser un pointer vers l'adresse de mes structures par exemple
Mais n'est il pas possible de passer en paramètre d'une PROC l'adresse d'une structure et de modifier dans cette proc les zones de la structure directement ????
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 Api_ STRUCT APIADDR DWORD ? Api_ ENDS .data info1 Api_ <> info2 Api_ <> .code mov edi, offset info1 invoke GetFnAddr,CTEXT ("user32.dll"),CTEXT ("MessageBoxA") mov edi, offset info2 invoke GetFnAddr,CTEXT ("Kernel32.dll"),CTEXT ("OpenFile") GetFnAddr Proc ModuleIn :DWORD, APIin:DWORD Invoke GetModuleHandle,ModuleIn Invoke GetProcAddress,EAX,APIin mov [edi.API_.APIADDR],eax Ret GetFnAddr endp
Quelque chose comme mon premier exemple (mov [Structin].API_.APIADDR,eax) mais qui puisse modifier mes structures ?
Je trouverais ça pratique de pouvoir passer une structure en parametre, modifier les zones, et retourner l'adresse de cette structure ou d'une autre
(on passe alors qu'un pointer et non pas plein de variables)
Merci par avance
Pascal
Partager