《IDA权威指南》 Note
最后更新时间:
插图ID:87390511
笔记主要用作字典,记录仅为了方便自己的查阅
调用约定:
1 |
|
1 |
|
1 |
|
1 |
|
函数特征:
函数名称:可用于更改函数名称
起始地址:IDA自动识别的函数起始点
结束地址:同上
局部变量区(Local variables area):函数局部变量专用的栈字节数。多数情况下,IDA会通过分析函数的栈指针的行为,自动计算该数值
保存的寄存器(Saved registers):为调用方保存寄存器所使用的栈字节数(指 push EBP,pop EBP等)。IDA认为保存的寄存器区域存放在保存的返回地址顶部、与函数有关的所有局部变量的下方。一些编译器选择将寄存器保存在函数局部变量的顶部。IDA认为保存这些寄存器所使用的空间属于局部变量区域,而非保存的寄存器区域(本例为main函数,在起始位置存在push EBP的行为)
已删除的字节(Purged bytes):表示当函数返回调用方时,IDA从栈中删除的参数的字节数。对cdecl函数而言,这个值应该为‘0’。对stdcall函数来说,这个值表示传递道栈上的所有参数占用的空间。在x86程序中,如果IDA观察道程序使用了返回指令的RET N变体,便会自动确定该数值。
帧指针增量(Frame pointer delta):编译器可能会对函数的帧指针进行调整,使其指向局部变量区域的中间,而不是指向保存在局部变量区域的底部的帧指针中。调整后的帧指针到保存的帧指针之间的这段距离叫做帧指针增量。使用该数值的目的,是在离帧指针1字节的偏移量(-128~+127)内保存尽可能多的栈帧变量。
不返回(Dose not return):函数不返回到它的调用方。如果调用这样的函数,在相关的调用指令之后,IDA认为函数不会继续执行
远函数(Far function):在分段体系结构上将函数标记为远函数。在调用该函数时,函数调用方需要指定一个段和偏移值。通常,是否使用远调用,应该由程序中使用的内存模式决定,而不是由体系结构支持分段(x86体系结构上使用了大内存模式(相对于平内存模式))决定
库函数(Library func):将函数标记为库代码。
静态函数(Static func):仅标记函数为静态函数
基于BP的帧(BP Based frame):BP指代EBP。暂时不同能够理解书中的描述
BP等于SP:一些函数将帧指针配置为在进入应该函数时指向栈帧的顶端,该情况将被标记该数值。基本上,它的作用等同于将帧指针增量大小设置为等于局部变量区域
Array数组功能:
数组元素宽度(Array element size):指定各元素的大小,单位为字节
最大可能大小(Maximal possible size):指定最大数组长度
数组大小(Array Size):早期版本也称为Number of element
行中的项目(Item on a line):单行显示的元素数量
元素宽度(Element width):控制显示时的字距
使用重复结构(Use “dup” construct):该选项会将相同的数值合并,用重复说明符组合成一项
有符号元素(Signed element):将数据显示为有符号或无符号
显示索引(Display indexes):如名的功能。索引将以注释的形式附加在每行的末尾,若单行有多个元素,则只会显示尾元素的索引
基本操作:
热键C:可用于将未定义的字符串反编译为代码
热键D:将代码转换为数据(可类似字符串),也可用于修改一定义数据的类型
热键G:跳转至目标地址
热键U:取消当前定义(当IDA错误的将某些数据视作了函数,使用该方法可以修正这种错误)