【发布时间】:2014-09-26 10:09:00
【问题描述】:
我有一个非常旧的程序,它崩溃了。在使用作为事后调试器安装的 Windbg 调试崩溃时,我注意到其中一个寄存器被设置为一个奇怪的值:
rdx=00000000deadface
导致崩溃(访问冲突)的线程的堆栈跟踪也包含一些可疑值:
objc_1!objc_msg_lookup+0x29:
00000000 6784a4c5 488b4a38 mov rcx,qword ptr [rdx+38h] ds:00000000deadfb06=????????????????
我从!analyze -v 命令的输出中包含的寄存器列表中获得了第一个值。第二个是由列出失败线程堆栈的命令生成的 (~9k)。
Windbg 是试图通过将这些值放入注册表和堆栈转储来告诉我一些事情,还是我只是某些旧测试代码或恶作剧的受害者(或者它只是一个巧合的值)?
该程序是用 obj-c 编写的,运行旧版本的 GNUstep 和 obj-c 运行时。
【问题讨论】:
-
有一个内存模式
deadbeef代表HeapFree()释放的内存 -
谢谢,很好的提示。刚刚发现
deadface是 GNUstep 用于类似目的的模式。
标签: objective-c windbg gnustep