无法找出 IDA 中的崩溃“无法读取内存-> 00000710(exc.code c0000005,tid 20612)”

逆向工程 艾达 视窗 二元分析 x86 调试器
2021-06-15 10:41:37

我正在尝试调试游戏。基本上,Steam 版本运行良好,但 GOG 版本(小 8kb)有一个恼人的问题,对于某些人(碰巧是我),游戏根本无法运行。它会崩溃并且没有已知的解决方案,所以我想尝试调试它(尽管我已经使用 IDA 一段时间了,但我对调试器还是很陌生)。当我在调试器中加载游戏时,我收到来自 IDA 的错误消息:

“无法读取内存 -> 00000710(exc.code c0000005,tid 20612)”

我什至不确定是因为反调试保护还是因为崩溃本身。我猜这是崩溃的错,因为当我尝试跟进此错误时,IDA 停止了该过程。

在这一点上我不知道该怎么做,因此我来这里问。感谢所有花时间甚至尝试帮助我的人!

谢谢你们。请问我是否遗漏了什么(因为我说我对这个还很陌生哈哈),我会很快回答。

崩溃时的程序集图像:

崩溃时的程序集图像

给出错误的函数的伪代码

2个回答

我还不能发表评论,所以我会尝试提交这个作为答案,希望能有所帮助:

您可以尝试将该异常传递给应用程序,看看它是否能够处理它。

为此,请转到调试器 -> 调试器选项 -> 编辑例外...(选项对话框底部的按钮)。

然后选择您的例外,RMC 并选择编辑。然后取消选中暂停程序选项并选中传递给应用程序复选框。

它崩溃是因为 [EAX+28h] 没有引用有效的可读内存位置。EAX = 6E8h + 28h = 710h 这不是引用有效位置。

EAX 是从内存位置 dword_19BA9E8 检索的,您需要弄清楚为什么没有用正确的值填充它。本质上,dword_19BA9E + 28h 处的值必须引用有效的可读内存位置以避免崩溃。