十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ghidra 调试器启动后 Dynamic Listing 为空怎么排查

Ghidra 调试器启动后 Dynamic Listing 为空怎么排查 Ghidra 调试器启动后 Dynamic Listing 为空怎么排查【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra用 Ghidra 调试器Linux 上以 GDB 为后端调试目标程序时点击 Launch 之后顶部本该显示反汇编的Dynamic Listing窗口却是空白的是官方调试课程中专门列出的一个故障场景。这篇文章按 调试器入门课程 给出的排查顺序说明如何一步步区分是没有真正连上还是连上了但目标没停住并给出对应的处理动作。以下路径以课程配套的termmines示例程序为例Linux GDB 为主线Windowsdbgeng和 macOSlldb的启动方式相同仅后端不同。先明确一下正常的判定标准用 GDB 启动termmines并等待片刻后Dynamic Listing顶部窗口应当显示反汇编代码如果你的窗口不是空白、而是一片灰色的00那是另一个症状只需检查 Dynamic Listing 右上角的Auto-Read下拉框是否设为Read Visible Memory, RO Once不必走下面的排查流程。下面针对完全空白的情况展开。第一步确认调试连接是否真正建立排查的第一步不是看 Terminal而是检查三个窗口是否同时满足Connection Manager窗口中有一条连接条目Model窗口有内容不是空的存在Terminal窗口。三者齐全说明连接已建立问题出在目标本身跳到第三步。如果缺任何一项说明 GDB connector 没有配置正确Dynamic Listing 空只是表象按第二步处理。第二步连接没建立时先拿到那条异常信息典型的失败现象是启动挂起几秒后弹出一大段文字。官方文档的处理方式是读这段文字。第一行会说明遇到的异常常见的是超时。按Keep按钮保留现场然后找到Terminal窗口——通常在最右下角找不到就打开Window → Terminals菜单。从 Terminal 输出的最顶部开始检查诊断信息。文档给出的两类常见原因原因一系统里没有gdb或 Ghidra 找不到gdb。现象是 Terminal 中出现类似bash: gdb: command not found的提示文档示例。如果gdb只是缺失安装后重试如果gdb存在但 Ghidra 找不到需要在启动器下拉菜单中选择Configure and Launch termmines using... → gdb来纠正配置。注意文档特别强调不要选Re-launch termmines using gdb因为该入口不会打开配置界面。原因二缺少 Python 依赖。现象是 Terminal 中出现类似导入google protobuf等 Python 包失败的错误。所需的依赖列在对应启动器的描述里Ghidra 发行版中自带了正确版本的安装包——在发行目录里搜索以.whl或.tar.gz结尾的文件用python3 -m pip install安装所需的那些。如果下拉菜单里根本没有 gdb 选项可能是旧版 Recorder 架构的 Debugger tool 还残留在配置中新版使用 Trace RMI 架构。文档给出的做法是删除当前的 Debugger tool然后重新导入默认工具在菜单选择Tools → Import Default Tools选中defaultTools/Debugger.tool点击 Import。还可以在安装目录中搜索名为local-gdb.sh的文件以确认 Trace RMI 的启动脚本存在。顺带一提如果 Tool Chest 里连 Debugger 图标都看不到先确认你打开的是 Ghidra 主项目窗口而不是 CodeBrowser工具箱就是导入程序列表上方那一排大图标。图标缺失时同样用上面的Import Default Tools流程导入。若重新导入后 Debug / Launch 图标仍不出现文档的判断是你的安装可能已损坏。第三步连接已建立按 Terminal 中的现象对号入座Connection Manager、Model、Terminal 都正常但 Dynamic Listing 仍为空时Terminal 窗口里的内容决定后续方向。文档列出四种情况情况 AGhidra 或 GDB 没能启动目标Terminal 中会显示错误消息例如termmines: no such file or directory文档示例。此时确认原始文件如termmines确实存在且具有可执行权限如果文件没问题在配置启动时调整Image选项——Image 指定了 GDB 实际加载的目标路径路径错误会导致这条错误。情况 B目标启动了但立刻退出Terminal 中会出现类似[Inferior 1 (process 1234) exited normally]的消息文档示例。文档给出的原因判断是检查原始文件是否带有main符号——注意只在 Ghidra 里给main打 label 是不够的磁盘上的原始文件必须自带main符号。两条替代路径通过菜单选择Debugger → Configure and Launch termmines using → gdb把Run Command改为starti。这会在系统入口点处断住而不再依赖目标导出main。如果之前已在 Ghidra 中给main打了 label还可以在那里下断点后继续运行相关操作在课程后续章节。完全脱离 Ghidra在独立终端里直接用 GDB 调试该目标看行为是否符合预期——这可以确认问题在 Ghidra 侧还是目标本身。情况 C目标启动了但还没停下来试试点击全局工具栏上的Interrupt按钮等价于 GDB 的interrupt/ Ctrl-C。如果中断后 Dynamic Listing 出现内容问题解决如果无效或不满意回到第二步重新检查连接配置。情况 D记忆映射未正确应用文档说明的少见 bug判定特征是Dynamic Listing完全空白但Regions窗口内容是齐全的——即后端调试器已经报告了完整的内存区域只是 Dynamic Listing 没有被刷新出来。修复动作最简单的方式是点一次Step Into按钮全局工具栏让程序单步执行一步Dynamic Listing 就会被踢出来如果不希望执行指令可以在Regions窗口的下拉菜单中把Force Full View打开再关闭切换一次即可。Dynamic Listing 恢复显示后如果视图位置不对双击窗口右上角的 pc ... 标签即可回到程序计数器。情况 E以上都不是在 Terminal 中直接输入info inferiors等 GDB 诊断命令从后端调试器的角度确认 inferior 的实际状态。修复完成的标准重新执行上述任一路径后判定标准与正常启动时一致Dynamic Listing 显示反汇编与开头截图一致且 Static Listing 与之保持同步。这正是课程练习Launchtermmines的完成条件。排查结束后按课程要求 Disconnect避免残留会话影响后续实验。前置条件与边界示例程序termmines若未提供编译产物需要在 Makefile 所在目录 执行make自行构建前提是系统装有ncurses及其开发头文件该示例面向 Linux 设计未测试 Windows。本文的排查顺序与命令均以 Linux GDB 路径为准出自 A1-GettingStarted.md 的 Troubleshooting 一节其他平台dbgeng、lldb的连接机制不同文档未覆盖其对应的空窗口排查细节。文中no such file or directory、exited normally等均为文档原文示例实际进程号、错误措辞可能不同以 Terminal 实际输出为准。【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表