Igor’s tip of the week #85: Source-level debugging
翻译作者:梦幻的彼岸
更新日期:2022年4月17日
原文标题:Igor’s tip of the week #85: Source-level debugging
原文地址:https://hex-rays.com/blog/igors- ... ce-level-debugging/
备注:若发现有可完善的地方,希望可留言反馈,共同完善
尽管IDA首先是为了在 "黑盒 "模式下分析二进制文件而创建的,即没有任何符号或调试信息,但它确实有能力在可用时使用这些信息。 调试器的功能最初也是为调试汇编级的二进制文件而优化的,但现在也可以在源代码上工作。 源码级调试源码级调试默认是启用的,但可以通过Debugger > Use source-level debugging 菜单项,或调试工具栏上的按钮手动关闭或开启。 如果输入文件有IDA支持的格式的调试信息(如PDB或DWARF),当调试开始时,它将被自动使用,并且正在执行的代码被调试信息所覆盖。 源代码文件如果源文件存在于原始位置,IDA将在单独的源视图窗口中打开它们,并突出显示当前执行的行。汇编指令仍然显示在IDA视图中,你可以继续使用它进行分析,而不需要源代码视图。需要注意的是,当当单步执行在源代码中没有对应关系的指令时,IDA可能会自动切换到反汇编(例如,编译器辅助函数,或辅助代码,如prolog或epilog指令)。 当单步执行反汇编后,执行回到源代码覆盖的区域时,你可以通过Debugger > Switch to source这个动作要求IDA再次显示相应的源代码(也可以在上下文菜单和工具条上使用)。这个动作甚至可以用在远离当前执行点的代码上。 源路径映射有时二进制文件对应的源代码可能是可用的,但与调试信息中记录的位置不同(例如,你可能在不同的机器上调试二进制文件,甚至从不同的操作系统远程调试)。在预期位置没有找到的文件会被打印在输出窗口。 使用Options > Source paths...,你可以设置IDA的映射,以便在新的位置找到源文件。 Locals-局部变量 当调试信息包括局部变量的信息时,IDA可以用它来显示它们的值。当你把鼠标悬停在源代码视图中的变量上时,会显示一个简短的、单行的变化形式。 对于更复杂的对象,打开专用视图可能更方便,在那里你可以展开和检查字段和子对象。这个视图可以通过Debugger > Debugger windows > Locals来获得。 Watches-监视 除了局部变量,你还可以只观察你需要的特定变量,而不是所有局部变量,或者全局变量的值。这个视图可以通过 Debugger > Debugger windows > Watch view打开。可以使用Ins或上下文菜单添加变量。 调试伪代码即使你没有你要调试的代码的调试信息,但有一个反编译器,也有可能像调试源文件一样调试伪代码。如果启用了源码级调试,但没有你正在浏览的特定代码片段的调试信息,IDA将自动使用伪代码。在调试过程中,你也可以使用常用的Tab热键切换到伪代码。在调试伪代码时,局部变量、监视和源码级断点与 "真正的 "源代码一样,都可以使用。 P.S. 细心的读者可能会在这篇文章中发现一个额外的惊喜。复活节快乐!
|