当在缓冲区中输入过多的数据时,缓冲区溢出就会发生,C语言提供了多种方法,可以使在缓冲区中输入的数据比预期的多。

局部变量可以被分配到栈上。这就意味着在栈的某个地方有一个固定大小的缓冲区。

而栈是向下增长的,而且一些重要的信息被存储在栈中,那么当向栈分配的缓冲区中存储的数据比它所能容纳的数据多时,将会发生溢出,并将过剩的数据溢出到堆栈上的相邻空间里。

代码

zhan.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof()
{
char buffer[8];     /* 一个8字节的字符缓冲区*/
/*将20字节的A复制到缓冲区*/
strcpy(buffer,"AAAAAAAAAAAAAAAAAAAA");
/*返回,因为堆栈溢出将引起一个访问违例。得到EIP*/
return 1;
}int main(int argc, char **argv)
{
bof();/*调用函数*/
/*打印一则短信息,因为溢出,执行将不会到达这个点*/
/*printf("Not gonna do it!n");
return 1; /*离开main函数*/
}

编译加深调试信息

#gcc -g -o zhan zhan.c

反汇编

#objdump -dS zhan

反汇编的结果很长,以下只列出我们关心的部分。

要查看编译后的汇编代码,其实还有一种办法是gcc -S XXX.c,这样只生成汇编代码XXX.s,而不生成二进制的目标文件。
整个程序的执行过程是main调用bof,我们用gdb跟踪程序的执行。

#gdb zhan

下一步:

下一步:

下一步:

下一步:

下一步:

溢出了!

41 41 41 41 AAAA ;缓冲区,装满了"A"

下一步:

这一步的$esp和$ebp没有变化,如同上一步中的。

下一步:

修改源代码将strcpy(buffer,"AAAAAAAAAAAAAAAAAAA");改为strcpy(buffer,"AAAAAAAAAAAAAAAAAAAAAAA");

对比之前的溢出我们可以看到溢出的方向

参考:《缓冲区溢出攻击——检测、剖析与预防》第五章

Linux环境程序栈溢出原理相关推荐

  1. Linux如何检测栈溢出,Linux环境下栈溢出实验(一) 改变程序流程

    简介 : 栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围.当溢出缓冲区之后 , 如果继续写入数据就有可能将内存中的 ...

  2. linux环境内存分配原理

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  3. linux环境内存分配原理 mallocinfo

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  4. 【转】linux环境内存分配原理 malloc info

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  5. 重新认识linux应用程序运行原理

    文章目录 总述 裸程序 存储布局 DEMO 裸程序的缺点 ELF程序 存储布局 hello world分析 elf可执行程序的适用场景 新的需求 共享库 进程地址空间 进程的内存管理 内核工作原理 L ...

  6. 图灵机器人 linux,群晖Docker下通过VNC打开Linux环境下的windows程序,Q酷图灵机器人...

    这也是一个思路,在linux环境下,我们通常通过wine来运行windows程序,这个是酷Q官方的Docker映像,有Dockerfile参考,对于明白原理的人可以移植很多windows程序到我们的群 ...

  7. Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序

    Linux环境:CentOS7.2 一.安装JDK 安装好的CentOS会自带OpenJdk,最好还是先卸载系统自带的JDK,然后自己重新去Oracle网站下载最新的JDK安装. 1.卸载系统自带的J ...

  8. Linux与shell环境,Linux 环境及 Shell 程序

    Linux 环境及 Shell 程序 View 98 Download 1 Embed Size (px) 344 x 292429 x 357514 x 422599 x 487 DESCRIPTI ...

  9. linux环境将python程序做成可执行

    linux环境将python程序做成可执行 作者: xuxiyao8888  时间: 2009-12-23 21:55:00 出处:http://blog.chinaunix.net/u3/11414 ...

最新文章

  1. 前端 ----jQuery的动画效果
  2. 决策树算法之cart剪枝
  3. Java中的双重检查锁(double checked locking)
  4. python下载安装教程3.7.3-【最新】Python-3.7.0安装教程及下载链接
  5. 软化边硬化边_夏天多给小朋友吃它,蛋白质是牛肉的3倍,老人吃还能软化血管...
  6. 直播丨数据安全:Oracle多场景下比特币勒索的揭密与恢复实战
  7. 国家信息安全水平考试NISP一级官方视频知识点整理
  8. 如何用word制作英语答题卡_初中英语考试答题卡可编辑WORD版
  9. 什么是拖库,撞库和洗库
  10. Handler native层实现原理
  11. WinZip for Mac注册版
  12. ftp上传软件,推荐5款好用的ftp上传软件
  13. 如何查看自己windows电脑的IP地址
  14. 前端扁平化数据转树形数据_javascript将扁平的数据转为树形结构的几种方法
  15. Arduino Uno 实验11——MQ-3酒精乙醇传感器模块
  16. MLY翻译 -- 4.Scale drivers machine learning progress
  17. 利用matplotlib绘制多个实时刷新的动态图表
  18. 全国计算机一级的分类,有关全国计算机一级
  19. linux学习 - 如何确定是否是 Centos 系统
  20. MATLAB基础教程,扫盲贴,快速入门MATLAB

热门文章

  1. 【python语言基础】疑难点整理1
  2. 认识PaddlePaddle
  3. 数据结构--单链表(数组)
  4. 优达学城《DeepLearning》2-1:卷积神经网络
  5. C/C++数组初始化的一些误区
  6. 数字图像处理——第四章 频率域滤波
  7. 相机标定 matlab opencv ROS三种方法标定步骤(2)
  8. 【强势来袭】Node.js(nodejs)实现“一口多用”(含用户创建、登录、鉴权token) 一个文件解决所有常态化需求
  9. 2020考研 管理类联考数学 【题型分析及解题思路】
  10. ATS 5.3.0日志字段分析(续)