梦幻的彼岸 发表于 2024-4-15 13:34:10

[IDA使用技巧]#016: 交叉引用

本帖最后由 梦幻的彼岸 于 2024-4-15 13:47 编辑

翻译:梦幻的彼岸原文地址: https://hex-rays.com/blog/igor-tip-of-the-week-16-cross-references/
cross-reference[交叉引用], n.
在书籍或其他信息来源的某处对同一作品中另一处信息的引用或指示(来自 Wiktionary)为了在分析过程中提供帮助,IDA 会跟踪程序不同部分之间的交叉引用 (简称xrefs)。您可以检查它们、浏览它们,甚至添加您自己的参考,以增强分析并帮助 IDA 或反编译器。交叉引用的类型交叉引用分为两组:
[*]代码 交叉引用表示两个代码区域之间的关系:

[*]跳转交叉引用表示有条件或无条件地将执行转移到另一个位置。
[*]调用交叉引用表示函数或过程调用,隐含返回调用指令后的地址。
[*]流程交叉引用表示从当前指令到下一条指令的正常执行流程。这种交叉引用类型很少在 IDA 中明确显示,但被分析引擎广泛使用,因此插件/脚本编写者需要了解它。
[*]数据 交叉引用用于引用代码或其他数据项中的数据:

[*]读取 交叉引用表示正在从该地址读取数据。
[*]写 交叉引用表示正在写入地址处的数据。
[*]偏移交叉引用表示项目的地址被占用,但没有明确读取或写入。
[*]结构 交叉引用是在反汇编中使用结构或将结构嵌入另一结构时添加的。
交叉引用类型可用单字母代码表示,这些代码在 IDA 的帮助主题"交叉引用属性 "中有所描述。检查和浏览交叉引用在图表视图中,代码交叉引用显示为代码块之间的边缘(箭头)。您可以通过直观或双击箭头进行导航。https://www.hex-rays.com/wp-content/uploads/2020/11/xrefs_graph.png在文本模式下,当前地址的交叉引用将作为注释打印在行末。默认情况下,最多打印两个引用;如果有更多,则显示省略号(...)。您可以在选项 > 常规... 交叉引用选项卡中增加打印的交叉引用数量。https://www.hex-rays.com/wp-content/uploads/2020/11/xrefs_text.png
注释中只显示显式引用;文本模式下不显示流程交叉引用。不过,如果没有流程交叉引用(代码执行流程结束),则会以虚线显示;通常会在无条件跳转或返回后出现,但也可能在调用非返回函数后出现。
要导航到交叉引用的源代码,请双击注释中的地址或按 Enter 键。
快捷键X 可能是最常用、最有用的快捷键:按下它可以查看光标下标识符的交叉引用列表。从列表中选择一个项目即可跳转到该项目。该快捷键不仅适用于反汇编地址,也适用于堆栈变量(函数中)以及结构 和枚举成员。https://www.hex-rays.com/wp-content/uploads/2020/11/xrefs_strmem.png
Ctrl + X 的作用与此类似,但会显示与当前地址的交叉引用列表,与光标在行中的位置无关。例如,当您需要检查当前函数的调用者列表时,它就非常有用,因为此时光标正位于该函数的第一条指令上。https://www.hex-rays.com/wp-content/uploads/2020/11/xrefs_func-e1605794384705.png
而 Ctrl + J 则会显示从当前地址开始的交叉引用列表。从一个位置到多个其他位置之间有多个交叉引用的情况比较少见,但在切换 (表格跳转)时却很有用:在间接跳转指令上使用该快捷键可以快速查看并跳转到任何切换情况。https://www.hex-rays.com/wp-content/uploads/2020/11/xrefs_from-e1605795076913.png如果忘记了快捷键,或者更喜欢使用鼠标,可以在跳转菜单(有时也在右键菜单)中找到相应的菜单项。

雷破天 发表于 2024-4-16 10:44:11

感谢分享。。。
页: [1]
查看完整版本: [IDA使用技巧]#016: 交叉引用