[二进制漏洞]栈(Stack)溢出漏洞 Linux篇

本文介绍了Linux系统的栈溢出漏洞,从栈的概念、堆栈数据存储、函数调用原理到栈帧的创建和管理,深入剖析了函数调用过程中的栈操作。并通过实例展示了如何利用GDB和pwndbg调试工具理解栈溢出,以及如何构造payload执行未调用的函数,强调了在实践中遇到的问题和解决思路。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

目录* [二进制漏洞]栈(Stack)溢出漏洞 Linux篇
+ 前言
+ 堆栈
- 堆栈(Stack)概念
- 堆栈数据存储方式
+ 函数调用
- 函数调用C语言代码
- 函数调用过程GDB调试
- 函数Call返回原理
+ 函数栈帧
- 函数栈帧描述
- 函数栈帧调试
+ 栈溢出漏洞实战
- pwndbg调试
- 开始Hack
+ Pwn菜鸡小分队

[二进制漏洞]栈(Stack)溢出漏洞 Linux篇

前言

我们在学习栈溢出漏洞之前,最好都要懂一些开发,还有一些汇编知识,因为不管是安全还是逆向,这些都是基于开发的,有了开发扎实的基础在后续中才会突破瓶颈。

堆栈

推荐大家可以先去看看《王爽汇编》,或者直接看Bilibili的堆栈是个啥?

堆栈(Stack)概念

首先来了解下什么是堆栈?我们得从CPU开始说起,CPU中有个模块叫ALU,专门用来处理数据运算。

学过汇编的小伙伴们都知道,CPU中有多个寄存器,不过是固定的,比如eax、ebx、ecx、edx、ebp、esp、edi、esi、eip等,当处理的数据过多或者过大时候,寄存器都不够用了,这时候怎么办?

增加CPU的寄存器吗?不行那样成本太大了,所以就需要找另外的地方存数据,那么硬件中读取速度除了CPU,也就内存条速度最快了。

所以CPU招募了内存条,来用来存储数据,在内存条中还专门找了个区域用来存数据即:堆栈(stack),说白了堆栈就是一块内存

堆栈数据存储方式

我简单的画了一个堆栈示意图,堆栈是一个自高地址向下增长的内存空间,从图中可以看到我们的高地址,也就是栈底,而低地址大概4个空格的位置是栈顶。

也就是记住地址越低是栈顶,而且堆栈中要添加数据,地址要往跟低的地址移动。

接下来我们继续来看看,如何在堆栈中存取和读取数据,他既然是块内存,那么我们关注的肯定是存取和读取,首先堆栈中存入数据叫push,读取数据叫pop

堆栈管理数据的方式是先进后出,即存取进去的数据,会在堆底,最后存取进去的数据会在栈顶,所以最先拿出来的数据也是最后放进去的即栈顶。

这里有个需要注意的地方,就是很多人以为pop数据后,堆栈里面的数据就清空了,其实并不是。

之前说过堆栈其实就是一块内存,当我们pop后,其实知识把栈顶往下移了而已,内存里面的数据还是在的,并没有被清除掉,只是对于堆栈而言,那数据被弹出。

当要push新数据,push很多个数据,或者pop很多个数据,都按照图示以此类推。

函数调用

函数调用C语言代码

学习堆栈最

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值