MAJ d'une STRUCT dans une PROC
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
Code:
1 2 3 4 5 6 7 8
| API_ STRUCT
Module DWORD ?
APIName DWORD ?
APIaddr DWORD ?
API_ ENDS
mystruct1 API_ <>
mystruct2 API_ <> |
Je connais 2 façons d'accéder à une zone d'une structure
Code:
mov eax,mystruct1.Module
Code:
1 2
| mov ebx, offset mystrcut1
mov eax,[ebx].API_.Module |
Mon 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 !
Par exemple quelque chose comme cela
Code:
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 |
Ici cela ne fonctionne pas car [Structin] est une addresse relative au stack et non pas l'addresse de ma structure
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
Code:
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 |
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 ????
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