在 DWORD 中存储远程虚拟地址?

Storing remote virtual address in DWORD?

我需要获取dll 中特定函数的RVA,然后将该RVA 添加到dll 的基本加载地址,以在远程进程内存中找到该函数。但是我需要将缓冲区中的这个内存地址传递给将在远程进程中创建的线程。所以我想知道我是否应该将其作为地址的 DWORD 表示形式传递。我使用的是 64 位 Windows,如果是的话,它应该是 DWORD_PTR、DWORD64 等吗?或者我仍然可以将它作为指针传递,这对我来说真的没有意义。

让我们做一个简短的调查。我们将参考spec。查看可选 header 中的 SizeOfImage 字段:

Size, in bytes, of image, including all headers; must be a multiple of Section Alignment.

实际上这是映射图像的大小,对于 PE32 和 PE32+ 格式都是 4 字节整数。因此 PE 内的所有相对地址总是适合 32 位整数。此外,PE 结构中的大部分 RVA 字段都声明为 DWORD,IMO 是一个很好的提示。

最重要的是:您可以在 32 位或 64 位系统上将 RVA 存储在 DWORD 中。