- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
24.2 调试器的基本显示
无论你以什么方式启动调试器,只要你感兴趣的进程在调试器的控制下被暂停,IDA 就会进入调试器模式(而非正常的反汇编模式),这时,IDA 将显示几个默认窗口。默认的调试器窗口如图 24-5 所示。
图 24-5 IDA 调试器窗口
如果你习惯于使用其他 Windows 调试器(如 OllyDbg1 或 Immunity Debugger2 ),你的第一个念头可能是,这个屏幕并未显示太多信息。这主要是因为 IDA 默认使用一种实际可读的字体大小。如果你“想念”其他调试器使用的微型字体,你可以通过 Options▶Font (选项▶字体)菜单来更改字体。如果你特别喜欢调试器窗口的某个布局,还可以使用已保存的 IDA 桌面(Windows▶Save Desktop)。
1. 参见 http://www.ollydbg.de/ 。
2. 参见 http://www.immunityinc.com/products-immdbg.shtml 。
如图 24-5 所示,调试器工具栏替代了反汇编工具栏,在调试方面,有大量标准工具可供使用,包括进程控制工具和断点操纵工具。
在调试器激活时,IDA View-EIP (➋)反汇编窗口是一个默认的反汇编风格的窗口,它与指令指针寄存器的当前值同步。如果 IDA 检测到一个寄存器指向反汇编窗口中的一个内存位置,该寄存器的名称(而不是该寄存器指向的地址)将在窗口左侧显示。在图 24-5 中,EIP 指向的位置在 IDA View-EIP 窗口中标记出来(注意,在这个例子中,EDX 也指向这个位置)。默认情况下,IDA 以红色突出显示断点,以蓝色突出显示将要执行的下一条指令(指令指针指向的指令)。与调试器有关的反汇编代码清单通过标准反汇编模式下的反汇编过程生成。因此,IDA 调试器提供了调试器所能提供的最佳反汇编功能。此外,如果你从打开的 IDA 数据库中启动调试器,IDA 将能够基于在启动调试器之前执行分析来突出显示所有可执行的内容。IDA 反汇编由进程加载的任何库代码的能力将受到更大限制,因为 IDA 没有机会在启动调试器之前分析相关.dll 文件。
“栈视图”( ➌ )窗口是另一个标准的反汇编窗口,它主要用于显示进程运行时栈的数据内容。所有指向栈位置的寄存器(本例中为 ESP )如“通用寄存器”窗口(➍ )中所示。通过使用注释,IDA 尽一切努力为栈上的每一个数据项提供上下文信息。如果栈项为内存地址,IDA 会尝试将该地址解析为函数位置(这有助于强调调用函数的位置)。如果栈项为数据指针,则显示对相关数据项的引用。剩余的默认显示包括十六进制窗口(➎,该窗口提供内存的标准十六进制代码块)、Modules 窗口(➏,其中显示进程镜像中当前加载的模块列表),以及 Threads 窗口(➐,其中显示当前进程中的线程列表)。双击列出的任何线程,IDA View-EIP 反汇编窗口将跳转到所选线程中的当前指令,并更新“通用寄存器”窗口以反映所选线程中寄存器的当前值。
“通用寄存器”( ➍)窗口(见图 24-6 )显示 CPU 的通用寄存器的当前内容。通过 Debugger 菜单,你还可以打开显示 CPU 段、浮点或者 MMX 寄存器内容的其他窗口
图 24-6 “通用寄存器”窗口
在“通用寄存器”窗口中,寄存器内容在相关寄存器名的右边显示,后面显示对每个寄存器内容的说明,最右边的列中显示 CPU 标志位。右击一个寄存器值或标志位,将显示一个 Modify 菜单项,你可以更改任何寄存器或 CPU 标志的值。使用菜单项可以快速将值归零,切换值,增大或减小值。切换值在更改 CPU 标记位时特别有用。右击任何寄存器值,还可以访问 Open Register Window 菜单项。选择 Open Register Window,IDA 将打开一个新的反汇编窗口,在其中显示以你选择的寄存器保存的内存位置为中心的内存位置。如果你无意中关闭了 IDA View-EIP 或 IDA View-ESP 窗口,可以对相应的寄存器使用 Open Register Window 命令,重新打开你关闭的窗口。如果一个寄存器指向一个有效的内存位置,那么该寄存器值右侧的直角箭头将处于活动状态,并以黑色突出显示。单击一个活动的箭头,当前的反汇编窗口将跳转到相应的内存位置。
Modules 窗口显示所有加载到进程内存空间中的可执行文件和共享库。双击任何模块名称,将打开该模块导出的符号列表。图 24-7 显示的是 kernel32.dll 的内容。如果你想在那些函数的入口处设置断点,符号列表将提供一种容易的方法来追踪加载库中的函数。
图 24-7 模块窗口及相关模块内容
其他调试器窗口可以使用各种调试器菜单选项来访问,我们将在 24.3 节讨论与调试器操作有关的其他窗口。通过 Views▶Open Subviews 命令,你不仅可以打开特定于调试器的窗口,还可以打开所有传统的 IDA 子窗口,如函数和段。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论