将函数的地址转换为UINTPTR_T给我不正确的结果

Cast address of function to UINTPTR_T giving me incorrect result

本文关键字:不正确 结果 UINTPTR 函数 地址 转换      更新时间:2023-10-16

我想要变量中的 &add1 值。我尝试了这个答案中的建议,但它没有给出我期望的结果。

uintptr_t add1Address = reinterpret_cast<uintptr_t>(&add1);

此时,add1地址等于11669784,即0x00B21118

但是,我的调试器(并使用 HxD 检查内存)告诉我 &add1 =0x00B217C0

这是怎么回事?

完整代码如下

#include "stdafx.h"
#include <iostream>
int add1(int num, int num2);
int add1(int num, int num2)
{
return num + num2;
}
int main(void)
{
uintptr_t add1Address = reinterpret_cast<uintptr_t>(&add1);
std::cout << std::hex << add1Address;
}

我在调试器中看到的内容在这里

让我做一个疯狂的猜测。

这是因为您可能有增量链接。

看看这个:附加的探查器库中的 c++ 函数地址与主题代码库中的地址不同

在你得到的地址处是跳转到调试器显示的地址。这允许重定向函数。

例如:

add1:
00B211EF  jmp         add1 (0B21730h) 

add1Address的值将是0x00B211EF,但Visual Studio将显示0x00B21730作为add()的地址。