16-交叉引用
交叉引用的定义:书籍或其他信息来源中的一个地方对同一作品中另一个地方的信息的参考或指导。
为了在分析过程中为你提供帮助,IDA 会跟踪程序不同部分之间的交叉引用(或简称为 xref),你可以检查它们、导航它们,甚至添加你自己的交叉引用lai增强分析并帮助 IDA 或反编译器。
交叉引用的类型
目前有两组交叉引用:
-
代码交叉引用:表达两个不同位置代码之间的关系。 -
jump 交叉引用:有条件或无条件地将执行转移到另一个位置。 -
call 交叉引用:函数调用。 -
flow 交叉引用:从当前指令到下一条指令的正常执行流程。这种外部参照类型很少在 IDA 中明确显示,但被分析引擎广泛使用,插件/脚本编写者需要注意它。 -
数据交叉引用:用于从代码或其他数据项引用数据 -
read:正在读取该地址处的数据。 -
write:正在写入该地址处的数据。 -
offset:该项目的地址已被获取,但未明确读取或写入。 -
structure:当一个结构用于反汇编或嵌入到另一个结构中时,会添加结构交叉引用。
查看并在交叉引用之间导航
在图形视图中,代码交叉引用显示为代码块之间的边(箭头)。您可以通过视觉上的箭头或双击来导航。
在文本模式下,对当前地址的交叉引用将作为注释打印在行尾。
默认情况下,最多打印两个交叉引用;如果有更多,则显示省略号 (...)。您可以在“选项”>“常规...交叉引用”选项卡中增加打印交叉引用的数量。
注释中仅显示明确的引用;流交叉引用不会在文本模式下显示。但是,缺少流交叉引用(代码执行流结束)由虚线表示;通常它出现在无条件跳转或返回之后,但也可能出现在调用非返回函数之后。
要导航到交叉引用的来源,请双击注释中的地址或按 Enter 键。
快捷键
快捷键 X 是最常见的交叉引用快捷键,按下 X 显示光标下标识符的交叉引用列表。从列表中选择一个项目以跳转到该项目。该快捷方式不仅适用于反汇编地址,还适用于堆栈变量(在函数中)以及结构和枚举成员。
Ctrl + X 也是交叉引用中比较常用的快捷键,无论光标位于行中的哪个位置。例如,当您需要在定位到第一条指令时检查当前函数的调用者列表时,它非常有用。
Ctrl + J 快捷键:显示当前地址引用的其他地址列表。从一个位置到多个其他位置的多个交叉引用是一种罕见的情况,但是,其中最常见的是 switch 跳转表,在间接跳转指令上使用此快捷方式可以让您快速查看并跳转到任何 switch case。
如果你忘了快捷键,你可以在相应地址的右键菜单中找到。
原文始发于微信公众号(二进制磨剑):IDA 技巧(16)交叉引用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论