转:http://book.51cto.com/art/201504/472956.htm
3.4.2 IDA使用说明(4)
其中,常用的功能有“Jump to xref to operand...”(快捷键“x”),点击后出现的窗口罗列了这个文件中显式引用这个符号的所有信息,如图3-40所示。
如果觉得这种表示方法不够直观,更喜欢Main window里的Graph view形式,可以选择菜单下面的“Xrefs graph to...”,但如果运气不好,这个符号被引用过多的话,就会看到类似图3-41这样的一团乱麻的界面,真是剪不断,理还乱。
在图3-41中,黑色的部分都是由一根根直线构成的,两侧基本已经黑成了一片,可以看出_objc_msgSendSuper2_stret这个符号被大量引用。
相对地,“Xrefs graph from...”则会显示这个符号显式引用的所有符号,如图3-42所示。
从图3-42可以看到,sub_1DC1C是个subroutine,它显式引用了j__objc_msgSend、_OBJC_CLASS_$_UIApplication和_objc_msgSend,而_objc_msgSend又显式引用了__imp__objc_msgSend。双击Main window里的_objc_msgSend,再双击__imp__objc_msgSend,可以看到它来自libobjc.A.dylib,如图3-43所示。
在多数情况下,找到一个感兴趣的符号时,会想进一步查找与这个符号相关的所有线索。一种笨拙但有效的方法是鼠标选中Main Window时点击菜单栏上的“Search”,此时会弹出如图3-44所示的子菜单。
然后选择“text...”,会弹出如图3-45所示的窗口。
这时,可以根据自己的情况选择搜索是否对大小写敏感,搜索格式是不是正则表达式等,然后勾选“Find all occurences”,点击“OK”,IDA会将文件中所有满足搜索条件的符号列出,供我们一一查看。
Graph view提供的功能非常多,以上只是简单介绍了几个常用的功能,熟练地使用它们是进行更深入研究的保障。Graph view的界面比较简洁,各代码块间逻辑清晰,适合肉眼观看。相对来说,现阶段切换到Text view的机会比较少,一般是在配合LLDB进行动态调试时,才会在Text view中对界面左侧罗列的符号地址特别关注,如图3-46所示。
需要注意的是,IDA的某些Bug会导致Graph view的末端显示不全(例如一个subroutine本来有100行指令,但只显示了80行),当你对某一个Graph view块中的指令产生明显怀疑时,可切换到Text view看看Graph view是不是漏显示了某些代码。这类Bug出现的概率不大,如果你不幸中彩,欢迎来http://bbs.iosre.com交流解决方案。
联系客服