将函数的地址转换为UINTPTR_T给出错误的结果

时间:2017-07-14 16:33:01

标签: c++

我希望& add1的值在变量中。我尝试了this answer,的建议,但它没有给出我期望的结果。

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

此时,add1Address等于11669784,即0x00B21118

然而,我的调试器(并使用HxD检查内存)告诉我&amp; 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;

}

我在debugger看到的是

2 个答案:

答案 0 :(得分:1)

让我猜一想。

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

看看这个:c++ function addresses coming out different in attached profiler library than in the subject code base

答案 1 :(得分:1)

您收到的地址是跳转到调试器显示的地址。这允许重定向函数。

例如:

add1:
00B211EF  jmp         add1 (0B21730h) 

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