返回介绍

6.1 基本 IDA 导航

发布于 2024-10-11 21:05:41 字数 4476 浏览 0 评论 0 收藏 0

当你开始接触 IDA 时,你可能满足于 IDA 提供的导航功能。除提供相当标准的查找功能外(在使用文本编辑器或文字处理器时,你已经熟悉这些功能),IDA 还将生成并显示一个完整的交叉引用(其功能类似于 Web 页面上的超链接)列表。因此,多数情况下,要导航到你感兴趣的位置,只需双击鼠标即可。

6.1.1 双击导航

反汇编程序时,程序的每个位置都分配到了一个虚拟地址。因此,只要提供希望访问的位置的虚拟地址,就可以导航到程序的任何地方。遗憾的是,对我们而言,记住大量地址并非易事。这促使早期的程序员给他们希望引用的程序位置分配符号名称,这大大简化了他们的工作。给程序地址分配符号名称,与给程序操作码分配助记指令名称并无不同。由于程序更易于记忆,读取和写入程序也更加方便。

如前所述,在分析阶段,IDA 会通过检查二进制文件的符号表生成符号名称,或根据二进制文件引用位置的方式自动生成一个名称。除符号用途外,反汇编窗口中显示的任何名称都是一个潜在的导航目标,类似于网页中的超链接。这些名称与标准超链接之间的区别在于:其一,这些名称不像超链接那样突出显示,表示它们可以访问;其次,IDA 中的名称需要双击才能访问,而访问超链接只需单击即可。前面我们已经讨论过如何在各种子窗口(如导入、导出和函数窗口)中使用名称,在这些窗口中,双击一个名称,IDA 将跳转到反汇编窗口中被引用的位置。这只是在双击导航的一个简单例子。如下例所示,每一个标有➊的符号都是一个已命名的导航目标。双击任何一个符号,IDA 将跳转到相应的位置。

.text:0040132B loc_40132B:                   ; CODE XREF: ➋ sub_4012E4+B^j  
.text:0040132B       cmp     edx, 0CDh  
.text:00401331       jg      short  ➊ loc_40134E  
.text:00401333       jz       ➊ loc_4013BF  
.text:00401339       sub     edx, 0Ah  
.text:0040133C       jz      short ➊ loc_4013A7  
.text:0040133E       sub     edx, 0C1h  
.text:00401344       jz      short  ➊ loc_4013AF  
.text:00401346       dec     edx  
.text:00401347       jz      short  ➊ loc_4013B7  
.text:00401349       jmp      ➊ loc_4013DD   ; default  
.text:00401349                               ; jumptable 00401300 case 0  
.text:0040134E ; ----------------------------------------------------------
.text:0040134E  
.text:0040134E loc_40134E:                   ; CODE XREF: ➋ sub_4012E4+4D^j  

为方便导航,IDA 把另外两个显示实体看成是导航目标。首先,交叉引用(如➋所示)被当成导航目标。通常,交叉引用被格式化成一个名称和一个十六进制偏移值。在上面的代码中, loc_40134E 右边的交叉引用引用了 sub_4012E4 之前的 4D 1677 10 字节的位置。双击交叉引用文本,IDA 将跳转到引用位置(本例中为 00401331 )。第 9 章将详细介绍交叉引用。

从导航角度看,第二种需要特别注意的显示实体是使用十六进制值的显示实体。如果窗口中的一个十六进制值是二进制文件中的一个合法虚拟地址,那么,双击这个值,反汇编窗口将显示你选择的虚拟地址。在下面的代码中,双击任何一个标有➌的值,反汇编窗口将跳转到相应的位置,因为它们都属于给定二进制文件中的合法虚拟地址。不过,双击标有➍的值则不会有任何效果。

.data:00409013       db     ➍ 4  
.data:00409014       dd ➌ 4037B0h  
.data:00409018       db     ➍ 0  
.data:00409019       db   ➍ 0Ah  
.data:0040901A       dd ➌ 404590h  
.data:0040901E       db     ➍ 0  
.data:0040901F       db   ➍ 0Ah  
.data:00409020       dd ➌ 404DA8h  

最后,双击导航还与 IDA 的输出窗口有关,尽管该窗口常用于显示各种信息性的消息。当一个导航目标(如前所述)出现在一条消息的开头位置时,双击这条消息,反汇编窗口将跳转到相应的位置。

   Propagating type information...  
   Function argument information has been propagated  
   The initial autoanalysis has been finished.  
➎  40134e is an interesting location  
➏  Testing: 40134e  
➎  loc_4013B7  
➏  Testing: loc_4013B7  

在上面的输出窗口中,两条标有➎的消息可用于导航到在消息开头位置指定的地址。双击其他任何消息,包括那些标有➏的消息,将不会有任何效果。

6.1.2 跳转到地址

有时候,你清楚地知道你想要导航的目的地址,但反汇编窗口中并没有可供双击导航的名称。在这种情况下,你有几种选项供选择。第一个是最基本的选项,即使用反汇编窗口滚动条上下滚动窗口,直到看到想要访问的地址。通常,只有知道要导航到的目标地址的虚拟地址时,才能采用这个选项,因为反汇编窗口是按虚拟地址逐行显示的。如果你仅仅知道一个已命名的位置,如一个名为 foobar 的子程序,那么,通过滚动条找目的地址就无异于大海捞针。这时,你可以选择对函数窗口按字母排序,滚动到想要的名称,然后再双击该名称。第三个选项是使用 IDA 的 Search 菜单提供的搜索功能。通常,在要求 IDA 搜索前需要指定一些搜索标准。如果你搜索的是一个已知的位置,使用该选项有点小题大做。

最后,到达一个已知的反汇编位置的最简单方法是,利用如图 6-1 所示的 Jump to Address (跳转到地址)对话框。

enter image description here

图 6-1 Jump to Address 对话框

使用 Jump▶Jump to Address 命令或在处于活动状态的反汇编窗口中按下热键 G,均可以打开 Jump to Address 对话框。如果把这个对话框看成 Go 对话框,可能有助于你记住相关的热键。要想导航到二进制文件中的某个位置,只需指定一个地址(名称或十六进制值),然后单击 OK,IDA 会立即显示你指定的位置。IDA 会记住你在这个对话框中输入的值,并通过一个下拉列表显示,以方便你随后使用。使用这项历史记录功能,你可以迅速返回你之前访问过的位置。

6.1.3 导航历史记录

如果将 IDA 的文档导航功能与 Web 浏览器的相应功能进行比较,我们可能会认为名称和地址等同于超链接,因为可以相对容易地访问它们以查看新地址。IDA 的另一项类似于传统 Web 浏览器的功能,是它的前进和后退导航功能(基于你浏览反汇编窗口的顺序)。每次你导航到反汇编窗口中的一个新位置,你当前的位置就会添加到位置列表中。有两种菜单操作可用于遍历这个列表。首先,Jump▶Jump to Previous Position (跳转▶跳转到前一个位置)命令可使反汇编窗口立即跳转到当前位置的前一个位置。这项操作在概念上等同于 Web 浏览器的后退按钮。其次为热键 ESC ,它是 IDA 中最有用的热键之一(可放入内存)。但是,需要注意的是,在反汇编窗口以外的其他窗口中,使用 ESC 键会关闭当前窗口。不过,你可以通过 View▶Open Subviews 命令重新打开你不小心关闭的窗口。在反汇编窗口中,如果你已经深入到一个函数调用链的几个层次,这时你希望导航到最初的位置,使用后退导航就极其方便。

Jump▶Jump to Next Position (跳转▶跳转到下一位置)类似于 Web 浏览器中的前进按钮,它可将反汇编窗口移动到列表中的下一个位置。与这项操作对应的热键是 CTRL+ENTER,尽管它并不如用于后退导航的 ESC 键有用。

最后,工具栏上还有两个更有用的导航按钮,如图 6-2 所示,它们的作用与浏览器中的前进和后退按钮类似。每个按钮旁边还有一个历史记录下拉列表,你可以迅速访问导航历史记录列表中的任何位置,而不必遍历整个历史记录列表。

enter image description here

图 6-2 前进和后退导航按钮

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文