基本ida导航
跳转到地址
jump to address对话框
导航历史记录
jump-jump to previous position可以跳转到前一个位置
jump to next position跳转到后一个位置
栈帧
栈帧是在程序运行时栈中分配的内存块,专门用于特定的函数调用。也通过栈帧(也称激活记录)使得对函数参数和局部变量进行分配和释放的过程对程序员透明。
调用一个函数的详细步骤:
- 将一个函数所需的所有参数放到其所用的调用约定指定的位置。如果参数被放在运行时栈上,可能会使栈指针发生改变。
- 调用方将控制权转交给被调用的函数。返回地址被保存到程序栈或者寄存器当中。
- 必要的话会配置一个栈指针。
- 被调用的函数为他需要的任何局部变量分配空间。
- 被调用的函数执行器操作。
- 完成其操作后释放局部变量的空间。
- 控制权返回给调用方。
调用约定
与之前在C++primer出现的相同。
也就是从左到右传参还是从右到左传参。
局部变量布局
布局与调用协定无关,且不存在规定局部变量布局的约定。
栈帧示例
将y压入栈,可以通过栈帧来计算数据存在的地址。还要注意是ebp还是esp。
IDA栈视图
如果发现如下指令
就知道第一个参数被加载到了eax寄存器当中。
为了了解不同栈视图。
其中
是一个简要的摘要简要栈视图。列出了呗直接引用的每一个变量。而IDA会根据返回地址的位置为变量取名。局部变量位于被保存的返回地址之上,而函数参数位于被保存的返回地址之下。以var为前缀也就是
函数参数名以arg为前缀也就是
其实还有一个arg_0未列出,其实是函数没有引用参数a所以不在摘要栈视图当中列出。
也可以选择替代这种表达方式,换成十六进制十进制等等
还有一个详细栈视图如下
搜索数据库
有两种通用搜索功能值得详细讨论,文本搜索和二进制搜索。
文本搜索
需要详细的完整的词
二进制搜索
对于搜索特定的二进制内容,应使用这个。
儒要搜索一个十六进制字节序列,应搜索两位一组的十六进制值的列表
名称与命名
在分析一个程序的时候,操作反汇编代码清淡的最主要和最常用使用的一个方法就是将默认名称更改为更有意义的名称。只需要单击所需要更改的名称,按N打开更名对话框进行更改。
参数和局部变量
栈内重命名变量
如图已更改
他会在上下文的每一个旧名称处更改。
已命名的位置
更之前大抵相同,但按完n后不太一样
- localnames仅限于当前函数
- include in names list包含在名称列表中
- public name公共名称
- autogenerated name自动生成
- weak name弱名称 没找到相同名称的公共符号重写时采用弱符号。
- create name anyway就是即时一个函数当中有两个相同的名称,你的重命名操作还要继续就勾选这个。
寄存器名称
对寄存器重命名,但实际使用的时候确是引用。
IDA的注释
常规注释
可重复注释 会出现很多地方
在前注释和在后注释
函数注释
一般在这里的位置
基本代码转换
IDA提供的包括
- 将数据转换为代码;
- 将代码转换为数据;
- 指定一个指令序列为函数;
- 更改现有函数的起始或结束地址;
- 更改指令操作数的显示格式。
代码显示选项
可以为每个反汇编行生成的信息数量自定义,每一个反汇编行都可以视为一个有许多部分组成的集合。
line prefixes行前缀
stack pointer栈指针具体如下
comments and repeatable comments 注释和可重复注释
auto comments自动注释
bad instructions bad marks无效指令bad标记
numbers of opcode bytes操作码字节数,如果过短如下就会显示不全
格式化指令操作数
可以重新格式化成不同进制。
操纵函数
新增函数
edit functions create function新建函数
删除函数
函数块
如下 会有一个头
双击①可以迅速到达该函数块
函数特性
ida为函数提供了许多特性