14.IDA-XREF(交叉引用)概述
来源:互联网 发布:网络销售应该怎么做 编辑:程序博客网 时间:2024/06/15 01:47
XREF分类
CODE XREF:代码交叉引用
DATA XREF:数据交叉引用
XREF描述含义
- 这是个代码交叉引用
- sub401000是被引用者,main+2A是引用者(引用sub401000的位置)
- 下箭头表示引用者的地址比sub401000高,你需要向下滚动才能到达引用者地址(main+2A),上行反之~
4.每个交叉引用注释都包含一个单字符后缀(箭头后面),用以说明交叉引用的类型,这里是↓P
CODE XREF
代码交叉引用用于表示一条指令将控制权转交给另一条指令。在IDA中,指令转交控制权的方式叫做流(flow)
IDA中有3种基本流:
普通流
调用流
跳转流
示例代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
示例汇编:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
普通流
普通流表示由一条指令到另一条指令的顺序流。这是所有非分支指令(如ADD)的默认执行流。
调用流
如果IDA认为某个函数并不返回(在分析阶段确定,注意不是运行阶段),那么,在调用该函数时,它就不会为该函数分配普通流
- 1
- 2
- 1
- 2
指令用于调用函数,如③处的 call指令,它分配到一个调用流(call flow),表示控制权被转交给目标函数
callflow函数的反汇编:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
callflow所在的位置显示了两个交叉引用(①处),表示这个函数被调用了两次
由函数调用导致的交叉引用使用后缀↓p(看做是Procedure)。
跳转流
每个无条件分支指令和条件分支指令将分配到一个跳转流(jump flow)
- 1
- 2
- 3
- 1
- 2
- 3
无条件分支并没有相关的普通流,因为它总会进入分支。上处的虚线表示相邻的两条指令之间并不存在普通流(也就是00401048后没有跟着顺序执行的指令)
跳转交叉引用使用后缀
↑j
(看做是Jump)。
DATA XREF
数据交叉引用用于跟踪二进制文件访问数据的方式。数据交叉引用与IDA数据库中任何牵涉到虚拟地址的字节有关(换言之,数据交叉引用与栈变量毫无关系)
最常用的3种数据交叉引用:
address何时被读取(读取交叉引用)
address何时被写入(写入交叉引用)
address何时被引用(偏移量交叉引用)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
读取交叉引用
读取交叉引用(read cross-reference)表示访问的是某个内存位置的内容
可以看到read_it在_main+E处、_main+25被读取,如下
- 1
- 2
- 1
- 2
读取交叉引用使用后缀
↑r
(看做是Read)。
写入交叉引用
写入交叉引用指出了修改变量内容的程序位置
可以看到write_it在_main+1B、_main+2E处被写入,如下
- 1
- 2
- 1
- 2
写入交叉引用使用后缀
↑w
(看做是Write)。
偏移量交叉引用
偏移量交叉引用表示引用的是某个位置的地址(而非内容)
可以看到ref_it在_main+4处被引用
- 1
- 1
偏移量交叉引用使用后缀
↑o
(看做是Offset)。
与仅源自于指令位置的读取和写入交叉引用不同,偏移量交叉引用可能源于指令位置或数据位置,例如虚表
回溯偏移量交叉引用是一种有用的技术,可迅速在程序的数据部分定位C++虚表。
- 14.IDA-XREF(交叉引用)概述
- 14.IDA-XREF(交叉引用)概述
- 15.IDA-查看XREF列表
- 15.IDA-查看XREF列表
- IDA反汇编/反编译静态分析iOS模拟器程序(六)交叉引用
- XREF
- XREF
- 如何给ida增加objective-c交叉引用
- 交叉引用
- 交叉引用
- LaTeX学习摘记(八):交叉引用
- spring交叉引用
- Latex交叉引用
- TeX-交叉引用命令
- C++交叉引用类
- C++交叉引用问题
- 类的交叉引用(或头文件依赖与交叉包含)
- boost 交叉语言支持概述
- php微信的文本回复功能开发
- inno setup添加pascal代码检测旧版本程序
- 使用application(servletContext)统计网站访问次数,及重启服务器后如何延续
- String学习(十六)-使用Xml文件配置事务
- 文章标题
- 14.IDA-XREF(交叉引用)概述
- 剑指offer(三)从尾到头打印链表
- Jquery中的bind(),on()绑定事件方式总结
- 【23种设计模式】结构型模式 > 外观模式
- Flutter实战一Flutter聊天应用(十九)
- 几个深度学习库
- 选择排序之简单选择
- 15.IDA-查看XREF列表
- Linux中在线安装MySQL数据库