





x86汇编堆栈
1)堆栈操作
x86汇编中的堆栈是一块特殊的内存区域,用于存储程序运行时的数据。它遵循"后进先出LIFO的原则",主要用于函数调用时的参数传递、局部变量存储以及保存返回地址。
堆栈操作的核心指令是PUSH和POP。PUSH指令将一个操作数压入堆栈顶部,同时栈顶指针ESP会相应地向下移动在32位系统中ESP减少4字节。POP指令则将堆栈顶部的值弹出到指定的寄存器或内存位置,并使栈顶指针向上移动ESP增加4字节。
其他与堆栈相关的指令包括:
PUSHF/POPF:分别用于将整个标志寄存器压入堆栈或弹出堆栈到标志寄存器。
PUSHAD/POPAD:用于将所有通用寄存器EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI一次性压入堆栈或弹出堆栈。
堆栈平衡是指在函数执行完毕后,所有压入堆栈的数据都必须被正确弹出,以恢复堆栈到调用前的状态,避免内存混乱或程序崩溃。
2)堆栈优缺点
优点:可以临时存储大量数据,便于数据查找。堆栈遵循先进后出原则,数据存取有序,结构简单稳定,不易混乱。常用于函数调用程序运行表达式计算等场景,可临时保存中间结果和现场信息,操作效率高。堆栈实现简单,仅需入栈/出栈/取栈顶等基本操作,内存管理方便。
缺点:访问受限,只能对栈顶数据进行操作,不能随机访问中间数据;空间大小固定或受限时,容易出现栈溢出;不适合需要频繁随机查找/修改和遍历的数据场景。
3)常用指令和寄存器
PUSH指令将一个操作数压入堆栈顶部,同时栈顶指针ESP会相应地向下移动在32位系统中ESP减少4字节。POP指令则将堆栈顶部的值弹出到指定的寄存器或内存位置,并使栈顶指针向上移动ESP增加4字节
观察ESP栈顶和EBP栈底
0040101F . 52 PUSH EDX
00401020 . 6A 00 PUSH 0 ; /pModule = NULL


597

被折叠的 条评论
为什么被折叠?



