【发布时间】:2021-05-20 00:04:39
【问题描述】:
我正在编写一个内核模式驱动程序,它执行一些指针运算,首先我得到一个 PVOID 指针,指向内存中 PE 模块的一部分,然后我需要向它添加一个偏移量并以适用于它的方式编译它32位和64位系统。
转换为 INT 或 UINT 将不起作用,因为众所周知,它们在 64 位系统中仍然是 32 位,因此在 64 位系统中将地址转换为它会导致问题。
所以现在我将地址转换为 ULONG_PTR,这似乎是 Microsoft 所建议的:
https://docs.microsoft.com/en-us/windows/win32/winprog64/rules-for-using-pointers
然后对其进行算术运算并得到新地址。
我这样做是最好的方式,还是除了 ULONG_PTR 之外还有更好的选择吗?因为我没有太多将地址转换为 ULONG_PTR 的示例代码。
将 64/32 位 PVOID 地址转换为 ULONG_PTR 对其进行算术运算会遇到任何问题吗?
基本上,我想将地址转换为某种类型,即 32 位系统中的 32 位和 64 位系统中的 64 位并且是无符号的,并允许我对地址进行算术运算,并寻找转换我的最佳选择PVOID 到。
【问题讨论】:
标签: c windows visual-c++