一个空函数的栈桢建立及初始化

本文深入解析了函数栈桢的建立、初始化和清除过程,涉及寄存器、汇编指令等基础知识。通过展示x86处理器中的通用寄存器和指针寄存器的基本介绍,以及简单汇编指令的运用,阐述了如何实现栈桢的构建与释放。附带的测试代码反汇编解释,进一步验证了理论与实践的结合。
摘要由CSDN通过智能技术生成

函数栈桢的建立、初始化及清除

本文目的在于描述函数栈桢的建立初始化和清除等过程,因此只对寄存器、汇编指令做一些简单的介绍。

一、一些寄存器的基本介绍(x86处理器中)


图中通用寄存器中:

       EAX  通常用于计算,作为累加器。

       EBX 

       ECX  通常用于循环变量计数,作为计数器。

       EDX 

       ESI  通常在内存操作指令中作为“源地址指针”使用。

       EDI  通常在内存操作指令中作为“目的地址指针”使用

图中指针寄存器中:

       EBP  基址指针,用于指示子程序或者函数调用的基址指针。

       ESP  栈指针,用于指示栈顶的位置。

二、一些简单汇编指令介绍(x86汇编)

数据传送指令:

       mov  将第二个操作数复制到第一个操作数

       push  入栈,将操作数压入内存的栈中,将ESP的值减4

       pop  出栈,首先将ESP指示的地址的内容出栈,然后将ESP的值加4

       lea  载入有效地址的指令,将第二个操作数的地址载入到第一个操作数

算数和逻辑指令:

       sub  将第一个操作数减去第二个操作数,并将相减后的值保存在第一个操作数。

       xor  逻辑异或,常用来对寄存器的值清0。

控制转移指令:

       ret  弹出栈中保存的指令地址,然后无条件转移到保存的指令地址执行。

 

rep stos  rep的目的是重复之前的一条指令,该指令之前的ecx是重复的次数。stos的作用是将eax的值拷贝到该指令操作数所指的位置。

三、一个空函数栈桢的建立、初始化及清除

测试代码:

int  main( )

{

       return 0;

}

反汇编代码及解释:

 

参考:x86汇编快速入门  http://www.cnblogs.com/YukiJohnson/archive/2012/10/27/2741836.html

     简明x86汇编    http://blog.csdn.net/feijj2002_/article/details/1597937

     函数调用堆栈  http://blog.csdn.net/zhanglianpin/article/details/6310873

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值