本文将讨论IDA中的交叉引用的相关知识。
更多c++逆向知识可以看B站的课程《C++ 反汇编基础教程(IDA Pro Visual Studio)》
交叉引用
IDA 中的交叉引用通常简称为xref 。从名字可以看出,使用快捷键就可以找出某个函数或者数据被引用的地方。
在IDA 中有两类基本的交叉引用:代码交叉引用和数据交叉引用。这两种引用又分别包含几种不同的交叉引用。

文本CODE XREF 表示这是一个代码交叉引用,而非数据交叉引用(DATA XREF )。后面的地址(这里为_main+2A )是交叉引用的源头地址。
交叉引用中使用的地址提供了额外的信息,指出交叉引用是在一个名为_main 的函数中提出的,具体而言是 _main 函数中的第 0x2A(42 )字节。地址后面总是有一个上行或下行箭头,表示引用位置的相对方向。
下行箭头表示 _main+2A 的地址比sub_401000 要高,因此,你需要向下滚动才能到达该地址。同样,上行箭头表示引用地址是一个较低的内存地址,你需要向上滚动才能到达。最后,每个交叉引用注释都包含一个单字符后缀,用以说明交叉引用的类型。
代码交叉引用
代码交叉引用用于表示一条指令将控制权转交给另一条指令。
在 IDA中,指令转交控制权的方式叫做流 (flow )。IDA 中有3 种基本流:普通流 、跳转流 和调用流 。
在接下来的讨论中,我们使用以下例子讲解:
int read_it; //integer variable read in main
int write_it; //integer variable written 3 times in main
int ref_it; //integer variable whose address is taken in main
void callflow() {} //function called twice from main
int main() {
int *p = &ref_it;

本文详细解释了IDAPro中的交叉引用功能,包括代码交叉引用(如指令间的控制转移)和数据交叉引用(如读写和地址引用),并通过C++逆向工程示例展示了各种类型的交叉引用及其在程序分析中的应用。
最低0.47元/天 解锁文章
2891

被折叠的 条评论
为什么被折叠?



