一、IDA的交叉引用
- 对于一些没有符号的函数,IDA会使用
sub_
加其虚拟地址的方式来作为函数名,如果想要查看这个函数在哪里被引用了,可以使用快捷键x
或Ctrl+ x
- 代码交叉引用(code xref)用于表示一条指令将控制权转交给另一条指令。在IDA中,指令转交控制权的方式叫做流(flow) IDA中有3种基本流:
- 普通流 ,表示由一条指令到另一条指令的顺序流,用
o
表示。 - 调用流 ,表示控制权被转交给目标函数 ,用
p
表示。 - 跳转流,每个无条件分支指令和条件分支指令将分配到一个跳转流(jump flow),用
j
表示。
- 普通流 ,表示由一条指令到另一条指令的顺序流,用
- 数据交叉引用(data xref)用于跟踪二进制文件访问数据的方式。数据交叉引用与IDA数据库中任何牵涉到虚拟地址的字节有关(换言之,数据交叉引用与栈变量毫无关系) 。IDA有3种数据交叉引用:
- address何时被读取(读取交叉引用)表示访问的是某个内存位置的内容,用
r
表示。 - address何时被写入(写入交叉引用) 指出了修改变量内容的程序位置 ,用
w
表示。 - address何时被引用(偏移量交叉引用)表示引用的是某个位置的地址(而非内容),用
o
表示。
- address何时被读取(读取交叉引用)表示访问的是某个内存位置的内容,用
二、IDA函数调用图
Xrefs to
表示谁调用了我;Xrefs from
表示我调用了谁
三、IDA搜索功能
- 常数搜索:菜单【Search】->【Immediate Value】,弹出一个窗口,勾选“Find all occurrences”
- 指令文本搜索:菜单【Search】->【Text】,弹出一个窗口,勾选“Find all occurrences”
- 字节序列搜索:菜单【Search】->【Sequence of bytes】,弹出一个窗口,勾选“Find all occurrences”
四、IDA伪代码窗口
- 在汇编窗口,按Tab/F5键,可以切换到伪代码窗口
- 在伪代码窗口,想要查看某条语句对应的指令位置,将鼠标放到该语句上,然后按Tab键即可
五、IDA数据窗口
- 打开方式:菜单【View】–>【Open subviews】–> 【Hex dump】,默认是打开的
- 可以在这个窗口更改汇编指令:F2键进入编辑模式,再次按下F2键退出编辑模式
六、IDA动态调试
- 选择调试器:菜单项【Debugger】->【Select debugger…】->选择【Local Windows debugger】
- 下断点:在想要下断点所在行最左边那个青色小点那里点一下,当前行就会变红,表明这行下了一个断点,或者也可以按F2键
七、IDA栈试图
- IDA 为任何函数栈帧都提供了两张视图:摘要视图和详细视图。
- IDA会根据变量相对于被保存的返回地址的位置为变量取名。局部变量位于被保存的返回地址之上,而函数参数则位于被保存的返回地址之下。
- 局部变量名称以
var_
为前缀,后面跟一个表示变量与被保存的帧指针(EBP)之间距离(以字节为单位)的十六进制后缀 - 函数参数名称以
arg_
为前缀,后面跟一个表示其与最顶端的参数之间相对距离(以字节为单位)的十六进制后缀
- 局部变量名称以