当前位置: 代码迷 >> 汇编语言 >> 汇编的一个小疑点
  详细解决方案

汇编的一个小疑点

热度:231   发布时间:2016-05-02 04:52:27.0
汇编的一个小问题
int i,j;
char c;
proc(i,j,c);
0096141E  lea         eax,[ebp-1Dh]  
00961421  push        eax  
00961422  lea         ecx,[ebp-14h]  
00961425  push        ecx  
00961426  lea         edx,[ebp-8]  
00961429  push        edx  
0096142A  call        00961087  
0096142F  add         esp,0Ch 
这是一个引用调用函数的反汇编,可以看到,ebp-8和ebg-14和ebp-1d之间分别差了12和10。
不明白为什么之间不是差了一个int大小4呢?

------解决方案--------------------
从最后一句看:0096142F  add         esp,0Ch 
恢复栈地址加了12,所以局部变量占用了12字节的栈空间,考虑到双字对齐,int i,j; char c;变量和占用空间大小一致无误.
至于压栈内容不正确,在现有资料上无法解释.
------解决方案--------------------
#1楼所说的0096142F  add         esp,0Ch ,这个是恢复3条push指令的堆栈,与局部变量无关。

至于三个压栈的参数,[bp-xx]都是proc所在函数的局部变量空间,它们之间不是差4个字节也很正常。所在函数有别的变量也会影响他们的偏移,另外DEBUG和RELEASE版本也可能不同
  相关解决方案