必威体育Betway必威体育官网
当前位置:首页 > IT技术

【汇编】堆栈和画堆栈图

时间:2019-10-04 06:45:37来源:IT技术作者:seo实验室小编阅读:74次「手机版」
 

堆栈

        根据咱们学汇编的经验呀,汇编用的最多的是寄存器和内存之间的不断相互传值传地址,井然有序。

       然而,你知道它们具体是怎么进行数据传递和交换的吗?

                                                   

       我们知道寄存器能够保存的数据量不多,所以需要存储大量数据的时候就需要保存到内存里面了

       那么:如果我存了一大堆数据,但是我想知道究竟存了多少数据,要怎么办呢?

                  如果我想在这对数据里面抽出某一个数据出来使用,要怎么抽呢?

                  用完这些数据是继续保存还是丢弃来呢?丢到哪里去呢?

                                    

                          针对以上种种问题,这里有个完美的解决方案—〉堆栈 

                                       

                                         NO.1 首先我们来了解下什么是堆栈

                  

                                         根据百度百科的记载,堆栈的定义如下

           顾名思义,就是在调用程序的时候,电脑会自动开辟一块内存空间专门用来放数据的,然后我们的数据就会想货物一样一个一个往上堆,需要用到的时候就拿出来使用,当程序执行完之后再腾出空间给其他程序继续使用,这个就是堆栈。

           这里两个概念需要了解下,一个是栈顶,一个是栈底。

                              栈顶:顾名思义,就是栈道的顶部啦~

                              栈底:顾名思义,就是栈道的底部啦~

                                                  

       然后呢,通常我们规定使用寄存器里面的EBP寄存器保存一个地址,作为堆栈的栈底,ESP寄存器保存一个地址,作为堆栈的栈顶,用EAX寄存器来保存需要输出的数据。                     

       举个例子,可以看到,有个寄存器EBP和ESP所保存的地址如下↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

                                               

               ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓所以它们在堆栈中是这样的↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓        

                

                    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓现在要实现以下功能↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

                                  

以上的指令含义分别为:1.将立即数“2”压进栈道里,并且栈顶提升4个字节

                                        2.将立即数“1”压进栈道里,并且栈顶提升4个字节

                                        3.进入名为“kong”的函数,把地址“0040100F”保存到EIP寄存器     里,并且把00401070(0040106c+0x4)压进栈道,并且栈顶提升4个 字节

                                        4.从函数中出来以后,栈顶esp+8(恢复栈顶)

                 ↓↓↓↓↓↓↓↓↓↓进入名为“kong”的函数后,需要执行以下的指令↓↓↓↓↓↓↓↓↓↓

                           ↓↓↓↓↓↓↓↓↓↓所以,“准备工作”堆栈图如下↓↓↓↓↓↓↓↓↓↓            

                                  ↓↓↓↓↓↓↓↓↓↓然后,执行完程序之后,堆栈的收尾工作如下↓↓↓↓↓↓↓↓↓↓

 

相关阅读

JAVA堆栈

转自:https://blog.csdn.net/lk274857347/article/details/77512555基本概念1.寄存器:最快的存储区, 由编译器根据需求进行分配,我

【干货】堆栈溢出一般是什么原因?

堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特

ARM汇编指令集汇总

ARM汇编指令集汇总 作者:毛茏玮 / Saint掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a微博:https://weibo.com/5458277467/

Java堆栈简介

JAVA在程序运行时,在内存中划分5片空间进行数据的存储。分别是:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。基本,栈stack和堆heap这

堆栈之间的差别

堆和栈的区别:一、堆栈空间分配区别:1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据

分享到:

栏目导航

推荐阅读

热门阅读