为什么VS2015调试器没有在观察窗口中正确显示功能地址?

时间:2018-01-29 14:50:47

标签: c++ visual-studio visual-studio-2015

Visual Studio 2015调试器中的C ++代码。平台:窗口10

观察窗口显示:

名称 functionPointer :0x012812d0 类型:void(*)(float)

名称 printStuff :0x01282440 类型:void(浮动)

名称& printStuff :0x01282440 类型:void(*)(float)

但是,输出窗口显示:

functionPointer = 012812D0 printStuff = 0x012812D0& printStuff = 0x012812D0 这是印刷品功能

map

enter image description here

输出

enter image description here

1 个答案:

答案 0 :(得分:0)

这种行为似乎是因为增量链接。启用时,该功能汇集在一个存储器地址中,另一个地址包含一个跳转表条目,其中一条跳转指令指向“实际”地址。始终通过调用跳转表来调用该函数。如果禁用增量链接,则通过跳转表的“绕行”将消失,您的示例案例也只显示一个地址。

其他所有内容似乎都显示跳转表的地址,但'printStuff'和'& printStuff'监视表达式显示了功能代码所在的实际地址。

另见: jump stubs in PE files