堆栈 pop push
1.什么是堆栈 1.1堆栈 堆栈可以看作程序的心脏 所有重要的数据都会在这个里面体现(比如运算一道算术题,虽然还没算出最终答案,但是你在算出最终结果前的一些过程值可以放进堆栈) 堆栈这块内存比较特殊,他是由大地址往小地址用 1.2栈指针寄存器ESP 假设现在程序的堆栈用到0018FF8C 当我们想使用一个程序停止之后的堆栈空间, 可以使用指令:mov dword ptr ds:[18FF88] ,1 mov dword ptr ds:[18FF84] ,2 但是 因为程序可能接着会执行,所以你得告诉程序,堆栈使用到哪个地方了 所以sub esp,8( 栈指针寄存器-8 )(相当于完成需要一个mov 一个sub) 如果现在不想用了 ,那么直接add esp,8 之后程序会直接覆盖 2.push指令 这个指令好哇,功能如下 指令格式: 于是 我们正常使用堆栈的时候要 写入数据,然后修改ESP(记录栈顶) 但是现在push一条指令直接搞定 直接push 3 就行 可以push 立即数 也可以push寄存器比如push EAX(把EAX的值写到堆栈中并且更新栈顶(ESP)) 还可以push内存,把指定内存的值存入堆栈并且更新栈顶(ESP)。 例子: 假如现在ECX的值为 但是现在 我只想执行十次,那他原来的值,就可以push ECX(这样就把ECX的值放到了堆栈中)