0

我正在调试运行时崩溃,堆栈跟踪似乎已损坏(请参阅昨天的相关问题:如果 EBP 帧指针为 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 文件中列出的相应函数的位置附近,但不指向。(这是有道理的,因为返回地址通常位于函数的中间,而不是开头)。

有人可以阐明吗?

4

0 回答 0