首页 > 解决方案 > 在 gdb (Windows) 中为 dll 添加调试符号

问题描述

我正在尝试在 Windows 中重做 Linux 'hacking' 教程的步骤。第一步,使用 GDB 调试程序。该命令ptype用于定义Player位于名为 .dll 的 DLL中的类的类定义GameLogic.dll。我尝试模仿这个确切的步骤ptype在我使用 MINGW 为 Windows 安装的 GDB 上使用。但是,我看不到任何定义,因为没有加载符号文件:

(gdb) ptype Player
No symbol table is loaded.  Use the "file" command.

符号文件GameLogic.pdb位于 DLL 目录中。特意提供它以进一步调查程序的结构。但是,使用该file命令我无法将其加载到程序中:

(gdb) file "E:/xx/PwnAdventure3/Binaries/Win32      
/GameLogic.pdb"
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
"E:/xx/PwnAdventure3/Binaries/Win32      
/GameLogic.pdb": not in executable format: File format not recognized

此错误可能是由于 Windows 使用的可执行格式不同。但是,我在研究此问题时在网上找到了其他方法:

add-symbol-file filename address
set debug-file-directory <directory>

我不知道在这种特殊情况下我应该如何使用这些。因为在示例中,它们提供了一个.o文件作为文件名。即使我可以提供.pdb文件,我也需要一个地址(我想它是加载 DLL 的地址?)。定义set debug-file-directory <directory>包含该.pdb文件的不同目录不起作用。

我还尝试了不同的调试器,如 OllDBG、WINDBG、Visual Studio 和 IDA Pro。在 Visual Studio 中,我可以看到加载的符号,但我找不到任何方法来进一步挖掘反汇编文件。只有在 OllyDBG 中,我才能看到属于Player该类的方法,例如,Player::SetJumpState(bool)被正确描述。我还必须承认,我对这些工具没有太多经验。

为了在 GDB 中加载 DLL 文件的符号以使 ptype 命令正常工作,需要哪些步骤?是否有另一种(更好的)方法使用上述程序之一来重新创建Player类及其局部变量?

问候

标签: c++windowsgdbmingw

解决方案


不幸的是,GDB 目前不支持从 PDB 文件中读取符号,即使在 Windows 上也是如此。WinDBG/Visual Studio 应该可以工作。


推荐阅读