欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

汇编的一个小疑点

更新时间: 2014-01-05 03:17:30 责任编辑: Author_N1

 

汇编的一个小问题
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版本也可能不同
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:30
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20460/
本文WWW.DOC100.NET DOC100.NET版权所有。