[PwnCourse:从0开始的PWN教程] 0-1-3 Stack & Calling convention
- 内容介绍
- 文章标签
- 相关推荐
佬友们别来无恙,今天是栈相关知识的讲解。本小节结束之后我们就要正式进入栈利用的学习啦。真是,绕了好大一圈呢
Stack
在0-1-2中,我们简单了解了用户虚拟内存空间的各个区段,其中也提到了栈。我们摘取Wiki上的描述的话,是这样的
堆栈(stack)又称为栈或堆叠,是计算机科学中的一种抽象资料类型,只允许在有序的线性资料集合的一端(称为堆栈顶端,top)进行加入数据(push)和移除数据(pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作,堆栈常用一维数组或链接串列来实现。常与另一种有序的线性资料集合队列相提并论。
实际上,广义上的栈就是一种数据结构。这里我们所研究的栈是x86的计算机系统内存空间中用来储存函数的参数,返回值,返回地址,局部变量等数据的一个区段,这个区段整体是由广义上的栈所结构。
所以,狭义上的栈,同样是一种后进先出LIFO(Last in First out)的数据结构。这种形式也正好满足我们一般函数调用的方式,父函数调用子函数,子函数执行完毕后返回父函数,返回时,子函数在前,父函数在后。
image3840×2761 247 KB
栈只能从一端进行数据的增删,这一端称为栈顶;而栈尾部则称为栈底。需要注意的是,栈底一般是作为一个固定的地址,是不变的。而栈顶是随时变化的。栈支持两种数据操作,压栈push和弹栈pop。
佬友们别来无恙,今天是栈相关知识的讲解。本小节结束之后我们就要正式进入栈利用的学习啦。真是,绕了好大一圈呢
Stack
在0-1-2中,我们简单了解了用户虚拟内存空间的各个区段,其中也提到了栈。我们摘取Wiki上的描述的话,是这样的
堆栈(stack)又称为栈或堆叠,是计算机科学中的一种抽象资料类型,只允许在有序的线性资料集合的一端(称为堆栈顶端,top)进行加入数据(push)和移除数据(pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作,堆栈常用一维数组或链接串列来实现。常与另一种有序的线性资料集合队列相提并论。
实际上,广义上的栈就是一种数据结构。这里我们所研究的栈是x86的计算机系统内存空间中用来储存函数的参数,返回值,返回地址,局部变量等数据的一个区段,这个区段整体是由广义上的栈所结构。
所以,狭义上的栈,同样是一种后进先出LIFO(Last in First out)的数据结构。这种形式也正好满足我们一般函数调用的方式,父函数调用子函数,子函数执行完毕后返回父函数,返回时,子函数在前,父函数在后。
image3840×2761 247 KB
栈只能从一端进行数据的增删,这一端称为栈顶;而栈尾部则称为栈底。需要注意的是,栈底一般是作为一个固定的地址,是不变的。而栈顶是随时变化的。栈支持两种数据操作,压栈push和弹栈pop。

![[PwnCourse:从0开始的PWN教程] 0-1-3 Stack & Calling convention](/imgrand/FyBtZeuy.webp)