EBP和ESP都是汇编中关于指针的寄存器.但是定义不同: (1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶.(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部. 也就是说ESP是栈顶指针,EBP是取堆栈指针. 其中上面提到了一个栈帧的概念,百度百科的解释为"过程活动记录,是编译器用来实现函数调用的一种数据结构".也…
知识点:  CALL框架  EBP寄存器 栈底指针  ESP寄存器 栈顶指针 一.EBP栈底指针 EBP是一个特殊的寄存器,通过EBP+偏移量 可以访问CALL里边的局部变量.它的低16位叫BP.//EAX和AX的关系 二.ESP栈顶指针 ESP栈顶指针与EBP构成的一段空间大小,一般就是本CALL局部变量的空间大小总和.ESP指针配合EBP使用.//SP 三.代码分析 void fun1(void) { //0401000 /$ 55 PUSH EBP //保存栈环境或者叫保存EBP指针…
由于汇编代码中的不同位置 ESP+40所指的地址不像EBP+40的地址那个是一定的,ESP+40指向的地址由栈顶变化影响.也就是和操作栈指令 PUSH POP 等影响. 汇编栈是一个线性的地址区间,地址上面小大面大.如下图所示,ESP指向栈顶地址 . PUSH 寄存器相当于 ESP减4.由此可推算 那么则有如下公式 前面PUSH数目为PUSH_COUNT 前面POP数目为POP_COUNT ESP基础值为 B_ESP 则汇编代码中的 ESP+OFFSET = ESP基础值+OFFSET-PUSH…
i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍参考了许多零散的文章,本文重点工作在于对相关概念的整理收集,并按相对合理顺序引出后文中对hook技术中的一些难点的解读. Android平台大多采用了ARM架构的CPU,而ARM属RISC,与X86架构的处理器有不同的特征,本文讲介绍ARM中不容易理解的PC寄存器各种问题,包括ARM流水线.PC寄存…
push ebp mov esp,ebp esp是堆栈指针 ebp是基址指针 这两条指令的意思是将栈顶指向ebp的地址 --------------------------------------------------------------- 例如: push ebp ;ebp入栈 mov ebp, esp ;因为esp是堆栈指针,无法暂借使用,所以得用ebp来存取堆栈 sub   esp, 4*5 ;下面的wsprintf一共使用了5个参数,每个参数占用4个字节,所以要入栈4*5个字节 p…
目录 PC逆向之代码还原技术,第五讲汇编中乘法的代码还原 一丶简介乘法指令 1.乘法指令 2.代码还原注意问题 二丶乘法的汇编代码产生的格式 1.高级代码观看 2.乘法的汇编代码还原. 三丶乘法总结 PC逆向之代码还原技术,第五讲汇编中乘法的代码还原 一丶简介乘法指令 1.乘法指令 在汇编中,乘法指令使用 IMUL 或者 MUL指令. 一般有两种形式 IMUL reg,imm 这种指令格式是 reg * imm的结果 重新放到reg中. mul同上 第二种指令格式: IMUL reg,reg1,…
目录 PC逆向之代码还原技术,第四讲汇编中减法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 三丶根据高级代码IDA反汇编的完整代码 四丶知识总结 PC逆向之代码还原技术,第四讲汇编中减法的代码还原 一丶汇编简介 在讲解减法的代码还原之前.我们首先要知道. 减法在汇编中对应的指令是什么. Sub 汇编指令. Sub x,y 将x的值 加上y 并且重新赋值给x 二丶高级代码对应汇编观看. 观看如下代码 int main(int argc, char* argv[]) {…
IA32寄存器 一个IA32CPU包含一组8个存储32位值的通用寄存器,这些寄存器用来存储整数数据和指针: 31-0 15-0 15-8 7-0 使用惯例 %eax %ax %ah %al 调用者保存 %ecx %cx %ch %cl 调用者保存 %edx %dx %dh %dl 调用者保存 %ebx %bx %bh %bl 被调用者保存 %esi %si 无 无 被调用者保存 %edi %di 无 无 被调用者保存 %ebp %bp 无 无 不得占用 %esp %sp 无 无 不得占用 第一行…
目录 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 总结 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 在讲解加法的代码还原之前.我们首先要知道. 加法在汇编中对应的指令是什么. Add 汇编指令. Add x,y 将x的值 加上y 并且重新赋值给x 二丶高级代码对应汇编观看. 观看如下代码 int main(int argc, char* argv[]) { 1 + 2; int nValue = 10 +…
标号(LABEL)是为一组机器指令所起名字,表示程序中的指令或者数据地址的符号.标号可有可无,只有当需要用符号地址来访问该语句时,才给此语句赋予标号.通过在目标地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址.标号是程序目标标志,总是和某地址相联系,供转移或循环指令控制转移使用. 标号是编译程序使用的,也就是说程序中最后生成的代码中标号都换成了相应的数值. 因标号表示是指令地址,所以它有三个属性,即段属性.偏移属性和类型属性.段属性即段地址,标号段必须在CS中.偏移属性是表示该标号…