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版本也可能不同