说点题外话,推荐一本二进制漏洞挖掘奇书:《0day安全:软件漏洞分析技术》,这本书从技术到进阶讲了与漏洞挖掘有关的知识。如果要在ctf的pwn方向或者是在网络安全方向的二进制漏洞挖掘中有所提升,这本书一定要看。下面回归正题。
栈在内存中是以什么形式存在的?首先要对内存有一定的了解。内存按功能大致可划分为代码区、数据区、堆区、栈区。其中栈区是内存中功能执行的一部分。通常来说,栈的操作有两种,压栈(PUSH)和弹栈(POP),遵循后进先出的原则(Last In First Out,简称LIFO)。要挖掘栈溢出漏洞,我们要对栈在内存中的实现细节十分了解。什么时候内存才会用到栈?程序员写一个普通程序,这个程序运行时调用函数的过程中在栈中是以栈帧的形式出现的。一般的小白在这里听得可能会一头雾水,没关系,下面听我娓娓道来。
你可以把栈想象成一摞摞盘子,不同的盘子代表不同的数据。这里有一张空桌面,把桌面表示为栈底。桌面上什么都没有,我们这时放入一个个盘子,叠成一摞,相当于压栈(PUSH)操作,把数据存入栈中。你也可以从桌面上拿出盘子,相当于在函数执行结束时,栈会执行弹栈(POP)操作。很容易想象,盘子的放置与拿出也满足后进先出(Last In First Out,简称LIFO)原则。但是你可能会问?栈跟函数调用有什么关系?没关系,下面继续讲解。
我们以一个程序作为例子。
#include<stdio.h>
void function(int a,

最低0.47元/天 解锁文章
685

被折叠的 条评论
为什么被折叠?



