我如何告诉 OllyDbg 我的源代码在哪里?

逆向工程 ollydbg
2021-06-28 11:47:41

我知道这个问题,但我不明白给出的唯一答案。

当我没有可用的 PDB 文件(调试符号)时,如何告诉 OllyDbg 源代码在哪里?

2个回答

在没有调试信息的情况下,您无法告诉 Ollydbg 或任何调试器源代码在哪里。

源代码行信息仅在调试信息文件中可用。

  • 使用 msvc 编译器链,它是程序数据库文件又名 PDB
  • 使用 gcc 编译器链,它被称为 dwarf

据我所知,使用 -g 选项构建时 gcc 将调试信息嵌入到可执行文件本身中(您可能需要 strip 以从二进制文件中去除调试信息)。

但是带有 /Zi 开关的 msvc 总是会创建一个单独的 pdb 文件。您可以使用 binplace 或 pdbcopy 实用程序有选择地从此 pdb 文件中去除调试信息。

我在 google 上搜索了 vectorcast,它似乎是一个软件测试套件,它的网站说它与 MSVC 工具链兼容,直到 Visual Studio 2013。

Vectorcast 支持的调试器

OllDbg 是一个 Windows 工具,因此使用 Windows 库dbghelp.dll来完成调试工作。你可以通过列出 Olly 的 dll 来判断:

在此处输入图片说明

dbghelp.dll使用符号文件将二进制信息与源代码链接起来。

因此,您可以使用 PDB 文件告诉 OllyDbg 源代码在哪里。PDB 是将二进制文件与源代码链接起来的东西。

以下摘录仍然有效 -在 Visual Studio 调试器中指定符号 (.pdb) 和源文件

程序数据库 (.pdb) 文件(也称为符号文件)将您在源代码中为类、方法和其他代码创建的标识符映射到在项目的已编译可执行文件中使用的标识符。.pdb 文件还将源代码中的语句映射到可执行文件中的执行指令。调试器使用此信息来确定两个关键信息:

  • 要在 Visual Studio IDE 中显示的源文件的名称和行号
  • 设置断点时在可执行文件中停止的位置

符号文件还包含源文件的原始位置,以及可以从中检索源文件的源服务器的位置(可选)。