c++ - 在 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
类及其局部变量?
问候
解决方案
不幸的是,GDB 目前不支持从 PDB 文件中读取符号,即使在 Windows 上也是如此。WinDBG/Visual Studio 应该可以工作。
推荐阅读
- dialogflow-es - 多个客户的单一对话流代理
- java - 安卓 | 如何使用 getLocationInWindow() 获取 X 或 Y 坐标值?
- python - 如何在从中创建数据框时将列表的所有元素保留在一行中
- flutter - Flutter - 在 GestureDetector、InkWell 等上添加事件监听器
- mirth - Mirth Connect 数据库阅读器不返回结果
- python - 'slug size太大'heroku,即使删除了多个文件?
- python - 如何从动态 d3.js 树的 pandas 数据帧生成 JSON
- google-cloud-functions - 尝试运行 Google Cloud Scheduler 任务时出现 PERMISSION_DENIED 错误
- bash - bash 脚本无法在 while 循环中删除 s3 对象
- amazon-web-services - AWS EMR sts 承担临时集群的角色调用