阅读:4508回复:8
平衡堆栈为什么用 add esp 0c ?
C调用方式把一个函数转为汇编代码为:
push var3 push var2 push var1 call test add esp 0C ;平衡堆栈 为什么要把esp 加 0c ??? |
|
沙发#
发布于:2007-10-18 09:45
因为前面的3个push让 esp减了 0x0c
|
|
|
板凳#
发布于:2007-10-18 10:42
非常感谢楼上兄弟的回答。 可是我怎么知道PUSH占用几个字节?
|
|
地板#
发布于:2007-10-18 10:52
牛犊 ^_^
|
|
地下室#
发布于:2007-10-18 10:57
引用第2楼zhangleierli于2007-10-18 10:42发表的 : BYTE 1字节 WORD 2字节 DWORD 4字节 不知道我说的对不对? |
|
|
5楼#
发布于:2007-10-18 13:35
整型、字符型4个字节,实数8个字节
|
|
|
6楼#
发布于:2007-10-19 08:55
一般32位下4个,64位下8个,编译器一般会对齐,不过如果自己写汇编的话,也不要违反对齐规则。
|
|
|
7楼#
发布于:2007-10-24 17:22
因为你压入了3个参数.并且变量都是4个字节.恢复时要在堆栈上删除那3个参数
|
|
8楼#
发布于:2009-12-01 17:26
其实这也有调用约定的问题最好就是自己u下 看堆栈
|
|