为了在分析过程中为您提供帮助,IDA会跟踪的程序不同部分之间 交叉引用(或 简称为 外部参照 )。 您可以检查它们,导航它们,甚至添加自己的视图以扩大分析范围并帮助IDA或反编译器。
交叉引用的类型
有两类交叉引用:
代码:交叉引用指示两个代码区域之间的关系:
跳转:交叉引用表示有条件或无条件地将执行转移到另一个位置。
调用:交叉引用表示隐式返回到调用指令后的地址的函数或过程调用。
流:交叉引用指示从当前指令到下一条指令的正常执行流。 此外部参照类型很少在IDA中明确显示,但分析引擎已广泛使用它,并且插件/脚本编写者需要意识到这一点。
数据:交叉引用用于引用来自代码或其他数据项的数据:
读取:交叉引用表示正在读取该地址处的数据。
写:交叉引用表示正在写入该地址处的数据。
偏移量:交叉引用表示已获取但未明确读取或写入的项目的地址。
当在拆卸中使用某个结构或将其嵌入到另一个结构中时,将添加 结构 交叉引用。
交叉引用类型可以用单字母代码表示。
检查和浏览交叉引用
在图形视图中,代码交叉引用显示为代码块之间的边(箭头)。 您可以通过视觉上的箭头或双击来导航。
在文本模式下,对当前地址的交叉引用将作为注释打印在该行的末尾。 默认情况下,最多打印两个参考。 如果还有更多,则显示省略号(...)。 您可以在选项>常规…交叉引用选项卡中增加打印的交叉引用数量。
注释中仅显示明确的参考; 流交叉引用在文本模式下不显示。 但是, 用虚线表示 没有 流程交叉引用(代码执行流程的末尾)。 通常在无条件跳转或返回之后可以看到它,但是在调用非返回函数之后也可以看到它。
要导航到交叉引用的来源,请双击或在注释中的地址上按Enter。
捷径
“X”这可能是最常见和最有用的快捷方式:按此快捷方式可查看 的 的交叉引用列表 光标处 标识符 。 从列表中选择一个项目即可跳转到该项目。 该快捷方式不仅适用于反汇编地址,而且适用于 堆栈变量 (函数中)以及 结构 和 枚举成员 。
“Ctri”–和“X” 的工作原理类似,但是 显示 的交叉引用列表 不管光标在行中的什么位置,它都会 当前地址 。 例如,当您需要将当前函数的调用者列表放在其第一条指令上时,该列表很有用。
另一方面,显示 中的交叉引用列表 当前地址 。 从单个位置到多个其他位置有多个交叉引用是一种罕见的情况,但是在其中有用的一种情况是 开关 (表跳转):在间接跳转指令上使用此快捷方式可以使您快速查看并跳转到任何一个开关案件。
如果您忘记了快捷方式,或者只是喜欢使用鼠标,则可以在“跳转”菜单(有时在上下文菜单)中找到相应的菜单项。
以上就是关于交叉引用的相关内容了
京ICP备09015132号-996 | 网络文化经营许可证京网文[2017]4225-497号 | 违法和不良信息举报电话:4006561155
© Copyright 2000-2023 北京哲想软件有限公司版权所有 | 地址:北京市海淀区西三环北路50号豪柏大厦C2座11层1105室