尽管IDA最初是为了在“黑箱”模式下分析二进制文件而创建的,即没有任何符号或调试信息,但它确实具备在可用时使用这些信息的能力。
调试器功能最初也被优化用于在汇编级别调试二进制文件,但如今也可以处理源代码。
源代码级调试
源代码级调试默认是启用的,但可以通过调试器菜单中的“使用源代码级调试”选项或调试工具栏上的按钮手动关闭或打开。
如果输入文件中有IDA支持格式的调试信息(例如PDB或DWARF),在调试开始时会自动使用这些信息,并且执行的代码被调试信息覆盖。
源代码文件
如果源文件存在于原始位置,IDA会在单独的源代码视图窗口中打开它们,并高亮显示当前执行的行。汇编指令仍然显示在IDA视图中,您可以继续独立于源代码视图进行分析。请注意,当步进到与源代码无对应的指令时(例如编译器辅助函数或辅助代码如序言或尾声指令),IDA可能会自动切换到反汇编。
当在反汇编中步进后,执行返回到源代码覆盖的区域时,您可以通过调试器菜单中的“切换到源代码”操作(也可在上下文菜单和工具栏中使用)要求IDA再次显示相应的源代码。即使是远离当前执行点的代码,也可以使用此操作。
源路径映射
有时,与二进制文件对应的源代码可能存在,但位置与调试信息中记录的不同(例如,您可能在不同的机器上调试二进制文件,甚至是从不同的操作系统远程调试)。未在预期位置找到的文件会在输出窗口中打印:
使用“选项 > 源路径...”可以为IDA设置映射,以便在新位置找到源文件。
局部变量
当调试信息包含局部变量的信息时,IDA可以使用它来显示它们的值。在源代码视图中将鼠标悬停在变量上时,会显示一个简短的单行版本。
对于更复杂的对象,可能更方便打开专用视图,在那里可以展开和检查字段和子对象。此视图可通过菜单“调试器 > 调试器窗口 > 局部变量”访问。
监视
除了局部变量,您还可以仅监视所需的特定变量,而不是所有局部变量,或全局变量的值。此视图可通过“调试器 > 调试器窗口 > 监视视图”打开。可以使用Ins
或上下文菜单添加变量。
调试伪代码
即使您没有代码的调试信息,但有反编译器,也可以像调试源文件一样调试伪代码。如果启用了源代码级调试,但没有特定代码片段的调试信息,IDA会自动使用伪代码。您也可以在调试期间随时使用常用的Tab
热键切换到伪代码。在调试伪代码时,局部变量、监视和源代码级断点与“真实”源代码一样可用。
学习资源
立即关注【二进制磨剑】公众号
原文始发于微信公众号(二进制磨剑):IDA技巧(85)源代码级调试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论