For navigational purpose,IDA treats two additinal display entities as navigational targets.首先,交叉引用(如②所示)被认为是导航目标。交叉引用一般来说被格式化为一个名字和一个十六进制的偏移量。前一个列表中的loc_40134E右边的交叉引用指向这么一个位置,这个位置位于sub_4012E4 后4D16或7710字节处。双击交叉引用的文字能够跳转显示引用的位置(在这个例子中是00401331)。交叉引用将在第九章有更为详细的介绍。
第二种类型的显示实体,在导航中使用了十六进制。如果一个显示的十六进制值是这个二进制文件中的合法的虚拟地址的值,当双击这个十六进制,将会使得反汇编窗口重新显示选择的虚拟地址的内容。在下面的列表中,双击任意一个被标记③的值,都将跳转显示新的位置的内容,因为每一个值都是这个二进制文件中的合法的虚拟地址。而双击标记为④,则没有任何反应。
当反汇编窗口处于激活状态下,可以通过“跳转”->“跳转到地址”,或是使用“G”快捷键来激活“跳转到地址”对话框。如果你将这个窗口看成是“Go”对话框,这将有助于你记忆相应的快捷键。这样,你只需要输入指定的地址(十六进制地址的值或是符号名字),点击确定按钮,就能够立即跳转并显示相应的位置。输入的值能够被对话框记录,并能够通过点击下拉列表,在随后的操作中再次被使用。这种历史记录的功能使得返回到先前访问过的位置变得十分容易。
导航历史记录
如果你将IDA的文档导航功能与网页浏览器中的文档导航功能相比较,你就会发现,符号名字与地址和超链接在功能上是一致的,通过它们都能够很容易地跳转到一个新的位置。IDA与传统网页浏览器共有的另外一个特性,是能够基于你流览反汇编代码的顺序来进行向前向后导航。每一次你流览反汇编窗口中代码一个新的位置,你的当前位置都会被追加到一个记录位置的链表上。有两个菜单操作能够遍历这个链表。首先,Jump->Jump to Previous Poistion表示立即跳转到紧临当前位置之前流览的位置。这与网页流览器中的后退按钮在概念上完全一样。这个是操作的快捷键是ESC,这是你应当牢记的最为常用的快捷键之一。但要注意的是,当是除了反汇编窗口以外的窗口处于活动状态的时候,使用ESC将会使得这些活动的窗口关闭。你可以通过View->Open将这些无意关闭的窗口再次打开。后退导航在你跟踪一个有着很多层的函数调用链的时候,或是你想会到你在反汇编窗口中最初的位置的时候,将十分有用。
Jump->Jump to Next Position是一个相对应的操作,能够将反汇编窗口所显示的位置在位置链表中向前移动,就如同网页流览器中的向前按钮。这个操作的相对应的快捷键是CTRL-ENTER,它没有向后流览的快捷键ESC的使用频率高。最后,正如下图所示,两个使用频率很高的按钮,提供我们所熟悉的向前向后导航的功能。