2016-07-12 9 views
1

Je dois obtenir le RVA d'une fonction spécifique dans une DLL puis ajouter cette RVA à l'adresse de chargement de base de la DLL pour trouver la fonction dans la mémoire des processus distants. Cependant, j'ai besoin de passer cette adresse mémoire dans un tampon à un thread qui sera créé dans le processus distant. Donc je me demandais si je devrais ou non passer cela comme une représentation DWORD de l'adresse. Je suis sur Windows 64 bits, alors si c'est le cas, DWORD_PTR, DWORD64, etc? Ou puis-je encore le passer comme un pointeur qui n'aurait pas vraiment de sens pour moi.Stockage de l'adresse virtuelle distante dans DWORD?

Répondre

1

Permet de faire une brève enquête. Nous nous référerons à spec. Observons le champ SizeOfImage dans l'en-tête facultatif:

Taille, en octets, d'images, y compris les en-têtes; doit être un multiple de Alignement de section.

En fait, ceci est la taille de l'image cartographiée et il est un nombre entier de 4 octets à la fois pour PE32 et PE32 + formats. En conséquence, toutes les adresses relatives dans PE sont toujours adaptées à un entier de 32 bits. Aussi la plupart des champs RVA dans les structures PE sont déclarées DWORD, ce qui est un bon indice. Pour couronner le tout: vous pouvez stocker RVA dans DWORD à la fois sur le système 32 bits ou 64 bits.