1

我正在调查一个错误的代码。应用程序验证程序在以下调用后显示堆已损坏:

AA!Class::Function+dbaf

我有地图文件。请帮助我如何使用上述信息和地图文件中的信息到达行号。

首选加载地址是00400000

0002:00000dc4       __imp_?Class@Function@@QAEXV?$vector@Uty_point@@V?$allocator@Uty_point@@@std@@@std@@0PAV23@@Z 0049bdc4 

注意:我有匿名的类和函数名。

4

3 回答 3

1

你只有地图文件吗?没有 PDB?如果您有完整的符号,则将地图和 .pdbs(和 .exe)与 WinDBG 一起使用(您在 Windows 上吗?)。我想你会看到你是如何被赋予函数的名称的。

如果不是... dbaf 是您的答案。这相当于什么?偏移量应该是错误指令的位置。当然,您需要弄清楚每个指令(汇编指令)的数量。

于 2011-08-10T09:36:04.000 回答
0

我记得只有地图文件和 EIP 的值(指令指针,代码崩溃的地址)能够跳转到错误代码,快速的谷歌搜索将我指向这个网页:Map Files And DLL Rebasing。我记得在理想情况下,您可以直接在 Visual C++ 调试器中更改 EIP 的值,它会跳转到相应的代码行。

现在,这真的是很久以前的 Visual C++ 6 时代了,我什至不知道它是否仍然适用于今天。正如已经指出的那样,您应该真正研究 Visual C++ 中的符号和程序数据库选项,有大量关于如何设置和使用它们的信息。

于 2011-08-11T09:20:14.817 回答
0

MAP 文件浏览器提供的功能允许您将崩溃地址、DLL 偏移量、符号偏移量或事件日志 XML 崩溃数据转换为相应的符号位置。

将地图文件加载到 MAP 文件浏览器中,然后转到查询菜单。

完全披露:我编写了 MAP 文件浏览器。

于 2021-11-01T15:32:14.553 回答