梦幻的彼岸 发表于 2022-4-17 12:17:40

[翻译]Igor的本周小贴士#85:源代码级调试

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 菜单项,或调试工具栏上的按钮手动关闭或开启。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936eqoatccx606gc2t0.jpg如果输入文件有IDA支持的格式的调试信息(如PDB或DWARF),当调试开始时,它将被自动使用,并且正在执行的代码被调试信息所覆盖。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936bkr569l00jhkumr9.jpg源代码文件如果源文件存在于原始位置,IDA将在单独的源视图窗口中打开它们,并突出显示当前执行的行。汇编指令仍然显示在IDA视图中,你可以继续使用它进行分析,而不需要源代码视图。需要注意的是,当当单步执行在源代码中没有对应关系的指令时,IDA可能会自动切换到反汇编(例如,编译器辅助函数,或辅助代码,如prolog或epilog指令)。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936knm0707uil959w3i.jpg当单步执行反汇编后,执行回到源代码覆盖的区域时,你可以通过Debugger > Switch to source这个动作要求IDA再次显示相应的源代码(也可以在上下文菜单和工具条上使用)。这个动作甚至可以用在远离当前执行点的代码上。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936nheztbstz4000se4.jpg源路径映射有时二进制文件对应的源代码可能是可用的,但与调试信息中记录的位置不同(例如,你可能在不同的机器上调试二进制文件,甚至从不同的操作系统远程调试)。在预期位置没有找到的文件会被打印在输出窗口。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936nbgmc4jln1ur1olj.jpg使用Options > Source paths...,你可以设置IDA的映射,以便在新的位置找到源文件。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936xjuxauv5zjaj3jwv.jpgLocals-局部变量当调试信息包括局部变量的信息时,IDA可以用它来显示它们的值。当你把鼠标悬停在源代码视图中的变量上时,会显示一个简短的、单行的变化形式。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936dupucuz7yd5o5lmu.jpg对于更复杂的对象,打开专用视图可能更方便,在那里你可以展开和检查字段和子对象。这个视图可以通过Debugger> Debugger windows > Locals来获得。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936jts2aaa5msb33t3v.jpgWatches-监视除了局部变量,你还可以只观察你需要的特定变量,而不是所有局部变量,或者全局变量的值。这个视图可以通过 Debugger> Debugger windows > Watch view打开。可以使用Ins或上下文菜单添加变量。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936cgbgtfmppzwtzyyf.jpg调试伪代码即使你没有你要调试的代码的调试信息,但有一个反编译器,也有可能像调试源文件一样调试伪代码。如果启用了源码级调试,但没有你正在浏览的特定代码片段的调试信息,IDA将自动使用伪代码。在调试过程中,你也可以使用常用的Tab热键切换到伪代码。在调试伪代码时,局部变量、监视和源码级断点与 "真正的 "源代码一样,都可以使用。https://bbs.huorong.cn/data/attachment/forum/202204/17/120936g9ppj3jzraavhpaw.jpg



P.S. 细心的读者可能会在这篇文章中发现一个额外的惊喜。复活节快乐!

乐活 发表于 2022-4-17 14:09:22

过来学习,多谢分享

飞天 发表于 2022-4-17 21:36:19

感谢斑竹分享文章。

onhawk 发表于 2022-4-18 08:28:35

谢谢分享,支持
页: [1]
查看完整版本: [翻译]Igor的本周小贴士#85:源代码级调试