为什么堆栈上的许多地址指向.map文件中函数的精确位置?

时间:2012-05-03 20:17:14

标签: c++ visual-studio visual-studio-2008 stack-trace

我正在调试运行时崩溃,堆栈跟踪似乎已损坏(请参阅昨天的相关问题:Is the stack corrupted if the EBP frame pointer is NULL?)。

尽管堆栈已损坏,但我在堆栈上看到许多值指向相应.map文件中函数的精确位置。此外,这些函数(在很大程度上,如果不是完全的话)是在这种情况下应该出现在堆栈上的预期函数。

作为一个例子(有很多),这里是堆栈值,以及相应的.map条目值:

0588fe5c: 005caa30 (stack address / value at that address)

0001:001c9a30 __ehhandler$?ProcessTAFRequest@TQueryThread@@UAEXXZ 005caa30 f portable_source:UQueryThread.obj
(.map file entry indicating that address 005caa30 is the starting location of the function noted)

假设(可能不正确)堆栈已损坏,除了顶部附近,并且我看到的函数地址确实对应于堆栈帧和相应的EIP(返回地址)指针,然后我的问题是:为什么我始终在与堆栈对应的.map文件中看到函数位置的精确值?在过去,我曾多次走过一条未损坏的堆栈跟踪,并且堆栈帧中的EIP指针总是指向靠近,但不是 ,位置.map文件中列出的相应函数的名称。 (这是有道理的,因为返回地址通常位于函数的中间,而不是在开始时。)

有人可以光明吗?

0 个答案:

没有答案