当前位置: 首页 > 编程日记 > 正文

Linux环境程序栈溢出原理

当在缓冲区中输入过多的数据时,缓冲区溢出就会发生,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");

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

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

相关文章:

[翻译]Joomla 1.5架构(十一) model 包

这个包包含了跟数据表交互的所有相关类 JModel This abstract class is the base class for all Joomla! data access objects. 所有数据访问类的抽象基类。 以下的类都分别实现对不同表的访问&#xff0c;不再翻译了。 Adapter Folder JModelCategory This is a data access …

度量快速开发平台端口映射的介绍

度量快速开发平台在客户中部署的时候&#xff0c;可能会想内网与外网用户同时使用。一般情况下&#xff0c;服务端都是部署在内网的&#xff0c;那外网用户要访问&#xff0c;就可能用到端口映射的功能。端口映射基本都是在路由器上进行。下面就是几个常用的路由器上的设置方法…

为什么栈和堆的生长方向不一样

栈的生长方向 8051的栈是向高地址增长&#xff0c;INTEL的8031、8032、8048、8051系列使用向高地址增长的堆栈&#xff1b;但同样是INTEL&#xff0c;在x86系列中全部使用向低地址增长的堆栈。其他公司的CPU中除ARM的结构提供向高地址增长的堆栈选项外&#xff0c;多数都是使用…

简单粗暴理解与实现机器学习之逻辑回归:逻辑回归介绍、应用场景、原理、损失以及优化...

作者 | 汪雯琦责编 | Carol来源 | CSDN 博客出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;学习目标知道逻辑回归的损失函数知道逻辑回归的优化方法知道sigmoid函数知道逻辑回归的应用场景应用LogisticRegression实现逻辑回归预测知道精确率、召回率指标的区别知道如…

生命的脆弱——悼念朋友

生命的脆弱让我们敲希望的钟啊多少祈祷在心中让大家看不到失败叫成功永远在让地球忘记了转动啊四季少了夏秋冬让宇宙关不了天窗叫太阳不西沉让欢喜代替了哀愁啊微笑不会再害羞让时光懂得去倒流叫青春不开溜让贫穷开始去逃亡啊快乐健康留四方让世界找不到黑暗幸福像花开放让大家…

VMware Tools手动下载

2019独角兽企业重金招聘Python工程师标准>>> VMware自己下载VMware Tools非常慢。你可以自己手动下载它。 下载地址为&#xff1a; version: 8.8.2 http://softwareupdate.vmware.com/cds/vmw-desktop/ws/8.0.3/ 选择最新的build&#xff0c;例如&#xff1a; http:…

Linux查看多核CPU利用率

1.top 使用权限&#xff1a;所有使用者 使用方式&#xff1a;top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 说明&#xff1a;即时显示process的动态 d :改变显示的更新速度&#xff0c;或是在交谈式指令列( interactive command)按s q :没有任何延迟的显示速度&#xf…

仓央嘉措《那一天,那一月,那一年,那一世》

那一天&#xff0c;   我闭目在经殿的香雾中&#xff0c;   蓦然听见你颂经中的真言&#xff1b;     那一月&#xff0c;   我摇动所有的经筒&#xff0c;   不为超度&#xff0c;   只为触摸你的指尖&#xff1b;     那一年&#xff0c;   磕长头匍匐在…

AI+大数据助力抗疫,带你认识百度地图的新玩法!

作者 | Aholiab责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“喂&#xff0c;你好&#xff0c;我是百度地图的客服&#xff0c;请问是xx店铺对吗&#xff1f;”“嗯&#xff0c;什么事&#xff1f;”“您家在疫情期间还照常营业&#xff0c;对吗&…

Coursera Machine Learning 作业提交问题

关于作业提交问题的解决办法 Octave 4.0.0无法正常提交 解决办法&#xff1a;打两个补丁 补丁1&#xff1a;平台通用补丁2&#xff1a;Win&#xff0c;Linux or Mac 注&#xff1a;补丁文件中有安装说明

Linux查看进程内存状况

查看全部进程 通过top或ps -ef | grep 进程名 得到进程的PID。该命令可以提供进程状态、文件句柄数、内存使用情况等信息。 #pa aux 先查看进程 nginx的工作进程是5757 pmap命令 可以显示一个或多个进程所使用的内存数量。你可以使用这个工具来了解服务器上的某个进程分配…

用于小型图形挖掘研究的瑞士军刀:空手道俱乐部的图表学习Python库

作者 | Benedek Rozemberczki译者 | 天道酬勤 责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;空手道俱乐部&#xff08;Karate Club&#xff09;是NetworkX Python软件包的无监督机器学习扩展库。详细可以参阅此处的文档&#xff1a;https://github.com…

电子商务创造的第二次产业机会

即将迎来冬至节气的这个周末&#xff0c;天寒地冻&#xff0c;却是电子商务的饕餮之季。淘宝网商交易大会刚刚在成都落下帷幕&#xff0c;而比网货交易会更令业界期待的“2009中国电子商务创新发展高峰论坛”也在北京顺利召开。大会由国内最大的电子商务软件及服务提供商ShopEx…

C#趣味程序---个位数为6,且能被3整出的五位数

using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){int count 0;int k;for (int i 1000; i < 9999; i){k i * 10 6;if (k % 3 0){Console.WriteLine(k);count;}}Console.WriteLine(count); }} }

c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值

第一种方法: 用委托,Form2和Form3是同一组 Form2 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Text; usingSystem.Windows.Forms; namespaceTestMouseMove { pub…

TCMalloc

tcmalloc 业界最有名的内存分配库&#xff0c;当数google 的tcmalloc。Tcmalloc 在管理小 内存块时非常有效&#xff0c;而且能够避免在大内存分配时的mmap()系统调用。它在多 线程中的表现也不错能很好的减少锁碰撞(glibc 致命的问题)。Tcmalloc 现在基 本上成了mysql DBA 的标…

前沿技术探秘:知识图谱构建流程及方法

作者 | 郑毅封图| CSDN│下载于视觉中国出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;随着AI技术的发展和普及&#xff0c;当今社会已经进入了智能化时代。与以往不同的是&#xff0c;在这一波浪潮中&#xff0c;企业不仅是向数字化转型&#xff0c;更是向…

【HDOJ】3275 Light

这就是个简单线段树延迟标记。因为对bool使用了~而不是&#xff01;&#xff0c;wa了一下午找不到原因。 1 /* 3275 */2 #include <iostream>3 #include <sstream>4 #include <string>5 #include <map>6 #include <queue>7 #include <set>…

lighttpd+PHP安装

lighttpd版本&#xff1a;1.4.32 php版本&#xff1a;5.4.11 2013.2.3第一次 php版本&#xff1a;5.4.12 2013.3.14第二次修改 1.lighttpd官网地址 http://www.lighttpd.net 2.下载安装lighttpd #wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttp…

描述C#多线程中 lock关键字

本文介绍C# lock关键字&#xff0c;C#提供了一个关键字lock&#xff0c;它可以把一段代码定义为互斥段&#xff08;critical section&#xff09;&#xff0c;互斥段在一个时刻内只允许一个线程进入执行&#xff0c;而其他线程必须等待。 每个线程都有自己的资源&#xff0c;但…

从样本处理到决策模型,如何用NLP识别盗版资源?

作者 | 阿里文娱高级开发工程师千起出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;背景随着5G时代来临&#xff0c;新媒体行业快速发展&#xff0c;盗版传播平台多样化、形式多样化&#xff0c;版权方难以通过有限的人力实现最大限度的维权。根据MUSO报告显示2017年…

利用.htaccess绑定子域名到子目录(亲测万网可用)

http://www.xmgho.com/archives/783.html 利用.htaccess绑定域名到子目录,前提你的空间服务器必须支持apache的rewrite功能&#xff0c;只有这样才能使用.htaccess。如果你的空间是Linux服务器 一般默认都开启了的。绑定域名 登陆域名管理台&#xff08;如DNSPod&#xff09; 把…

Memcached内存池分析

针对Memcacged1.4.15代码 1.完整slabs内存池图 这是我画的memcached的slabs内存池对象关系图&#xff1a; 2.内存池数据结构 typedef struct {unsigned int size; /* 每个item的大小 */unsigned int perslab; /* 每个page中包含多少个item */void *slots; …

Google重磅发布开源库TFQ,快速建立量子机器学习模型

整理 | 弯月编辑 | 郭芮出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;近日&#xff0c;Google 与滑铁卢大学、大众汽车等联合发布 TensorFlow Quantum&#xff08;TFQ&#xff09;&#xff0c;一个可快速建立量子机器学习模型原型的开源库。TFQ提供了必…

.net3.5的安装与修复

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />.net3.5的安装与修复.net3.5正常安装的顺序是先安装windows IIS组件&#xff0c;然后再安装.net3.5安装包&#xff0c;而.net3.5安装包的下载地址可以去百度和google上搜一下&…

jquery easy ui 简单字段选择搜索实现

写的比较粗糙&#xff0c;望见谅。 要实现的效果&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>jQuery EasyUI Application Demo</title><link rel"stylesheet" t…

训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……...

作者 | Lionbridge AI译者 | 天道酬勤 责编 | 徐威龙封图| CSDN│下载于视觉中国出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;在机器学习领域&#xff0c;训练数据准备是最重要且最耗时的任务之一。实际上&#xff0c;许多数据科学家声称数据科学的很…

JavaScript Switch 语句

avaScript Switch 语句如果希望选择执行若干代码块中的一个&#xff0c;你可以使用 switch 语句&#xff1a;语法&#xff1a;switch(n){case 1:执行代码块 1breakcase 2:执行代码块 2breakdefault:如果n即不是1也不是2&#xff0c;则执行此代码}工作原理&#xff1a;switch 后…

参观Speedy Cloud 有感

上周老男孩的所有学生参观了Speedy Cloud &#xff0c;在这里我首先感谢Speedy Cloud的邀请和服务&#xff0c;我们每一个同学的收获都很大&#xff0c;不管是在以后的发展&#xff0c;还是现在的学习&#xff0c;都给了我很大的推动作用&#xff0c;帮助我去了解计算机的发展的…

C语言文件操作函数大全

unix中一切皆文件&#xff0c;所以文件操作至关重要&#xff01; clearerr&#xff08;清除文件流的错误旗标&#xff09; 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 clearerr&#xff08;&#xff09;清除参数stre…