转自:https://www.cnblogs.com/leo0000/p/5719186.html

最近又遇到了一个崩溃,栈回溯非常怪异。

/lib/i386-linux-gnu/libc.so.6(gsignal+0x4f) [0xb2b751df]
/lib/i386-linux-gnu/libc.so.6(abort+0x175) [0xb2b78825] /lib/i386-linux-gnu/libc.so.6(+0x6b39a) [0xb2bb239a] /lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x45) [0xb2c4b0e5] /lib/i386-linux-gnu/libc.so.6(+0x102eba) [0xb2c49eba] /ramdisk/xxxxxx() [0x8467639] /ramdisk/xxxxxx() [0x849a802] /ramdisk/xxxxxx() [0x84b75da] /ramdisk/xxxxxx(xxxxxxxxxxxx+0x444) [0x84b9224]

  其中的xxxxx是公司的模块和函数,故隐藏,对接下去的分析没有影响。

  一开始,因为没有接触过__fortify_fail这个函数,另外加上因为有一部分栈回溯没有对应的符号,我以为是数组溢出把栈信息破坏了。但实际上想想不对,如果是栈信息被破坏了,不出意外的话,应该是回溯不到某些很有序的函数的,这些函数我没上。

  后来同事无意的一句话,说__fortify_fail是内存检测,我才百度了一下这个__fortify_fail函数,那么这个函数是什么情况下会被调用的呢?

一。gcc编译选项-fstack-protector和-fstack-protector-all

  正是我在前面猜测的错误原因,牛人Stack Guard 就想出了保护栈信息的方式,在ebp和ip等信息的地址下面放一个保护数,如果栈溢出,那么这个8位数会被修改,就会导致函数进入栈溢出错误处理函数,也就是导致了上面的栈。

二。比较加选项前后的反汇编代码

  源码:

#include <stdio.h>
int main()
{char a;int i; memcpy(&a,"ss",2); printf("1\n"); memcpy(&i,"sssss",4); printf("2\n");      return 0; }

  使用gdb调试该程序,首先查看a和i的地址,

(gdb) p &a
$1 = 0xbffff69b "\b\364\037\374\267\220\204\004\b" (gdb) p &i $2 = (int *) 0xbffff694

  显然变量a的地址要高,更接近栈顶。可以证明i的溢出并不一定能被检测到,而a的检测一定会被检测到。

  看下汇编代码的对比。

  movw $0x7373那句话就是往a里面拷贝ss,所以整个程序前后的差异在于插入两段代码,这两段的代码就是用来检测局部变量。

  运行溢出时的栈

#0  0xb7fdd424 in __kernel_vsyscall ()
#1  0xb7e4f1ef in raise () from /lib/i386-linux-gnu/libc.so.6 #2 0xb7e52835 in abort () from /lib/i386-linux-gnu/libc.so.6 #3 0xb7e8a2fa in ?? () from /lib/i386-linux-gnu/libc.so.6 #4 0xb7f20dd5 in __fortify_fail () from /lib/i386-linux-gnu/libc.so.6 #5 0xb7f20d8a in __stack_chk_fail () from /lib/i386-linux-gnu/libc.so.6 #6 0x08048485 in main ()

  与本文最前面的错误是一致的

三。走读代码修改错误。

四。总结

  当然这个举措并不能够完全的抑制栈溢出,如果跳过了保护数,那么还是检测不到栈溢出的,并且对其他的局部变量溢出没有保护。当然每个变量都保护会大大增加程序复杂度。

转载于:https://www.cnblogs.com/sky-heaven/p/9237758.html

利用gcc自带的功能-fstack-protector检测栈溢出及其实现【转】相关推荐

  1. 利用gcc自带的功能-fstack-protector检测栈溢出及其实现

    最近又遇到了一个崩溃,栈回溯非常怪异. /lib/i386-linux-gnu/libc.so.6(gsignal+0x4f) [0xb2b751df] /lib/i386-linux-gnu/lib ...

  2. 虚拟机可以做成存储服务器吗,利用win10自带虚拟机功能轻松打造家用nas

    利用win10自带虚拟机功能轻松打造家用nas 2020-11-17 11:53:29 16点赞 95收藏 26评论 创作立场声明:本文所有内容原创,所涉及产品均自费购置.无利益关系.观众大人们可自行 ...

  3. w10虚拟服务器,利用win10自带虚拟机功能轻松打造家用nas

    利用win10自带虚拟机功能轻松打造家用nas 2020-11-17 11:53:29 16点赞 96收藏 26评论 创作立场声明:本文所有内容原创,所涉及产品均自费购置.无利益关系.观众大人们可自行 ...

  4. Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略

    Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略 目录 利用Excel自带筛选功能统计各个字段不同类别及其个 ...

  5. 用计算机按数字铃声,利用计算机自带功能设置校园和谐铃声

    目前,无论城市学校还是边远农村中小学,上级行政部门都要求在学校大门口及重点部位安装监控设备,凡是进入学校的人员,都是监控的对象,这些监控设备每天24小时都在工作,将监控到的情况传输到专门配置的计算机中 ...

  6. 利用gcc的-finstrument-functions获取函数轨迹跟踪

    在软件系统的性能及架构考量中,将特定运行顺序的函数按照运行顺序进行编译,有利于提高软件的运行效率. 在一个已有的大型软件系统中,获取软件相关函数的运行顺序,可以利用gcc自动的-finstrume ...

  7. 利用Cadence Allegro强大的功能节省您调丝印的时间

    本文转载自 https://www.mr-wu.cn 调丝印.拉等长.撩妹是老wu的工作日常,? 现在,随着Cadence Allegro 新版本的发布,其加入了强大的丝印辅助功能,让你不用再苦逼的浪 ...

  8. allegro 丝印 对齐_利用Cadence Allegro强大的功能节省您调丝印的时间

    调丝印.拉等长.撩妹是老wu的工作日常,? 现在,随着Cadence Allegro 新版本的发布,其加入了强大的丝印辅助功能,让你不用再苦逼的浪费时间去调丝印,能省下更多的时间来撩妹- 好吧,也许你 ...

  9. VC++利用笔记本自带摄像头扫二维码功能(附源码demo)

      VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第8章:VC++利用笔记本自带摄像头扫二维码功能(附源码demo) 源代码demo已上传到百度网盘:永久生效  ,代码实现了打开笔记本 ...

最新文章

  1. num2cell用法
  2. MBR与GPT分区格式(实例-创建大于2TB的分区)
  3. 【转】Java finally语句到底是在return之前还是之后执行?
  4. 在secureCRT软件上运行一些简单的python脚本
  5. ASP.NET Core 认证与授权[4]:JwtBearer认证
  6. 前5个有用的隐藏Eclipse功能
  7. 从外部调用Django模块
  8. 移动端实时3D目标检测,谷歌开源出品,安卓下载就能用
  9. fglrx 9.8与kernel 2.6.30
  10. android实现计算器功能吗,安卓实现一个计算器的功能
  11. rk3288 lvds屏参资料_RK3288四核高性能主板,微型工业主机
  12. 计算机如何更改键盘设置在哪里设置,原神pc按键怎么改
  13. 策略模式:网络小说的固定套路
  14. asp.net开发wap程序必备:识别来访手机品牌型号【来源网络】
  15. 利用arcmap提取河流中心线
  16. TextRNN+attention
  17. what is Differential steering and skid steering ?
  18. ES6中的字符串API.md
  19. 从平安普惠捆绑意外险,看最强金融生存法则:底子厚、路子野、扛得住
  20. 【STM32 嵌入式课程实验】实验一 单个LED灯的闪烁

热门文章

  1. rancher集群POC部署(一)
  2. 以彼之道,还施彼身:Android 模拟定位
  3. MMORPG - 战斗系统,计算伤害
  4. 神经网络计算机定义,神经网络
  5. 面试前看一看,Redis不再难
  6. 关于前端安全防范做了一些总结,供参考交流
  7. 【NOI】6264:走出迷宫/ 2.5基本算法之搜索
  8. 零基础使用Multisim进行半波整流电路的仿真
  9. 昂贵的付费咨询时代下我们如何正视知识价值?尽在CCTC 2016
  10. 基于TFS的持续集成搭建流程