EIP,ESP,EBP寄存器

发布时间:   来源:文档文库   
字号:
EIPESPEBP
(2011-10-1114:46:49
标签:it
分类:.NET
1.EIP2.ESP3.EBP
1.EIP寄存器里存储的是CPU下次要执行的指令的地址
也就是调用完fun函数后,让CPU知道应该执行main函数中的printf"函数调用结束"语句了。
2.EBP寄存器里存储的是是栈的栈底指针,通常叫栈基址,这个是一开始进行fun(函数调用之前,由ESP传递给EBP的。(在函数调用前你可以这么理解:ESP存储的是栈顶地址,也是栈底地址。
3.ESP寄存器里存储的是在调用函数fun(之后,栈的栈顶。并且始终指向栈顶。堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。
允许插入或删除操作的一端称为栈顶另一端称为栈底对堆栈的插入和删除操作被称入栈出栈
有一组CPU指令可以实现对进程的内存实现堆栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。
CPUESP寄存器存放当前线程的栈顶指针
EBP寄存器中保存当前线程的栈底指针
CPUEIP寄存器存放下一个CPU指令存放的内存地址CPU执行完当前的指令后,EIP寄存器中读取下一条指令的内存地址,然后继续执行。espebp区别
问题:pushebp

movesp,ebp干嘛要这样?

--------------------------------------------------------------------------------
esp是堆栈指针ebp是基址指针

那两条指令的意思是将栈顶指向ebp的地址
---------------------------------------------------------------楼主写的好像是要用GCC来编译的汇编?pushebp;ebp入栈
movebp,esp;因为esp是堆栈指针,无法暂借使用,所以得用ebp来存取堆栈
subesp,4*5;下面的wsprintf一共使用了5个参数,每个参数占4个字节,所以要入栈4*5个字节push1111push2222push3333
pushoffsetszFormatpushoffsetszOut
callwsprintf;调用wsprintf
addesp,4*5;堆栈使用完毕,4*5个字节给系统...
movesp,ebp;恢复esp的值popebp;ebp出栈ret



主要是用来保存/恢复堆栈,以便传递参数给函数。
MASM里面,有一条更方便的语句,就是invoke,使用它后,你就不用自己做这些事情了。

---------------------------------------------------------------esp始终指向栈顶,ebp是在堆栈中寻址用的



本文来源:https://www.2haoxitong.net/k/doc/76b08f0403d8ce2f00662345.html

《EIP,ESP,EBP寄存器.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式