int i=1,b=2,c=3,d=4,g=5;
Add(i,b);
i=g;
}
EBP被ESP赋予了栈地址后就可以用
EBP-XXX方式去访问栈中数据,
而ESP则在为局部变量与函数参数忙碌着..所以他的值是不断变化的
而用ESP进行寻址的规则则是
当前ESP地址+push个数*4+SUB减去的大小=此时的ESP应该与EBP相等
所以的话此时再用ESP得到的值-要访问元素所在位置*4就可以得到正确的地址值
mov eax,dword ptr ss:[ esp+4c] ESP+4c 与mov dword ptr ss:[ebp-14].相同
并且验证了一点,上面有个CALL调用部分,但是在执行到
mov eax,dword ptr ss:[ esp+4c]的时候堆栈已经平衡,并不会影响其对 ebp-14的寻址
由此证明一点,
在被调用函数中是可以访问调用函数中的局部变量的...
下面是调用函数中五个局部变量的地址及其值
0012FF6C 00000005
0012FF70 00000004
0012FF74 00000003
0012FF78 00000002
0012FF7C 00000001
不过他们的计算出来的公式稍微麻烦点..祈祷以后别有这样的加壳软件出现,若真这样光计算数据来源就得累死人的不行