如果对ESP,EBP,栈帧等概念比较陌生,推荐先去了解一下函数调用的过程。
推荐使用OD+VS自己实现一遍加深印象。(OD用来查看内存,VS用来看汇编代码和源代码的对应情况)
mov与lea的区别
指令:mov 操作对象:变量 有无[]没有区别,都是取值
指令:mov 操作对象:寄存器 有[]表示取地址,没有[]表示取值
指令:lea 操作对象:变量 有无[]没有区别,都是取地址
指令:lea 操作对象:寄存器 有[]表示取值,没有[]表示取地址
代码中把对于ebp的偏移操作当作变量
内置类型
代码
#include<cstdio>
int addv(int a,int b)
{
int x=a,y=b;
return x+y;
}
int addr(int&a,int&b)
{
int x=a,y=b;
return x+y;
}
int main()
{
int a=1,b=2;
printf("%d\n",addv(a,b));
return 0;
}