大家好,我是小典,我来为大家解答以上问题。堆栈,nd,堆栈平衡,很多人还不知道,现在让我们一起来看看吧!
建栈过程 参数2 由INVOKE或PUSH+CALL实现 参数1 返回地址 EBP原值 <-- EBP指向 由stdCall自动实现(PUSH EBP和MOVE EBP,ESP) 局部变量1 由stdCall局部变量实现 局部变量2 PUSH寄存器1 手工实现(PUSHFD,PUSHAD) PUSH寄存器2 PUSH寄存器3 ESP指向 处理过程: XXXX PTR [EBP + 4*(X+1)] 访问参数的格式,手工实现 XXXX PTR [EBP - 4*X] 访问局部变量的格式 恢复过程: 恢复寄存器: POP 寄存器3 手工实现(POPAD,PUSHFD) POP 寄存器2 POP 寄存器1 清除局部变量并恢复EBP寄存器: mov ESP,EBP 由stdCall自动实现 pop EBP 清除参数: ret 参数使用的字节数(向上取为4的倍数) 由stdCall的ret实现 注意: EBP:参数和局部变量的偏移基地址。
使用PUSH EBP 和MOV EBP,ESP设置 2、ESP:总是指向当前堆栈栈顶,并以dword为单位上下移动 3、ret 后面的数字是4(dword)的整数倍 4、过程参数都是dword类型 5、局部变量在堆栈中以dword方式对齐 文章出处: http://www.diybl.com/course/3_program/hb/hbjs/200798/70350.html www.bestmax.org。
本文到此讲解完毕了,希望对大家有帮助。