通过VS地址擦除系统定位缓冲区溢出问题
VS2019增加了一个名为“地址擦除系统”的功能,默认是关闭的,可以在项目“属性”-“c/c++”-"常规"中开启。在开启地址擦除系统”功能时,将调试信息格式设置为“程序数据库”。如下图:

如果没有该项,检查VS2019的版本是否低于16.9,并且在安装项中是否安装“C++ AddressSanitizer”。如下图:


下面用一些缓冲区溢出的例子,让编译器帮忙判断出错位置。
全局缓冲区溢出
1 #define _CRT_SECURE_NO_WARNINGS
2 #include <iostream>
3 using namespace std;
4
5 char sBuf[5];
6 int main()
7 {
8 int nNum = 1;
9 strcpy(sBuf, "Hello World!");
10
11 for (int i = 1; i < 101; i++)
12 nNum += i;
13
14 cout << "Num = " << nNum << endl;
15 getchar();
16 }
在上面代码中,定义了一个容量为5字符数组,将"Hello World!"字符串拷贝至该空间中,很明显这里发生了溢出。在不开启“地址擦除系统”功能下,能正常执行,不会有任何错误提示。如下图:

开启“地址擦除系统”功能,程序崩溃。

堆栈缓冲区溢出
1 #define _CRT_SECURE_NO_WARNINGS
2 #include <iostream>
3 using namespace std;
4
5 int main()
6 {
7 int nNum = 0;
8 char sBuf[5];
9 strcpy(sBuf, "Hello World!");
10
11 for (int i = 1; i < 101; i++)
12 nNum += i;
13
14 cout << "Num = " << nNum << endl;
15 getchar();
16 }
上面代码在不开启“地址擦除系统”功能下,数据计算异常,原因是在调用strcpy函数时,溢出部分的数据写入了nNum地址中,导致nNum计算的值出错:

观察内存分布情况:

在实际工程中,如果遇到这种问题,定位是相当复杂的。开启后,调用strcpy函数直接崩溃:

堆缓冲区溢出
堆缓冲区和上面两种差不多,就不放代码了。

通过VS地址擦除系统定位缓冲区溢出问题的更多相关文章
- 缓冲区溢出利用与ShellCode编写
一.实验目的 熟悉编写shellCode的流程 掌握缓冲区溢出的利用 二.实验环境 系统环境:Windows环境 软件环境:C++ ,缓冲区溢出文件链接 三.实验原理 要实施一次有效的缓冲区溢出攻击, ...
- Kali学习笔记20:缓冲区溢出实验环境准备
在前几篇的博客中:我介绍了OpenVAS和Nessus这两个强大的自动化漏洞扫描器 但是,在计算机领域中有种叫做0day漏洞:没有公开只掌握在某些人手中 那么,这些0day漏洞是如何被发现的呢? 接下 ...
- Linux系统缓冲区溢出
Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...
- Kali学习笔记33:Linux系统缓冲区溢出实验
之前做过一个Windows应用SLmail的缓冲区溢出的实验 这次来做一个Linux平台的缓冲区溢出实验: 缓冲区溢出是什么? 学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序 ...
- 小白日记17:kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail
缓冲区溢出实例 缓冲区溢出原理:http://www.cnblogs.com/fanzhidongyzby/archive/2013/08/10/3250405.html 空间存储了用户程序的函数栈帧 ...
- kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail
kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail 相关链接:https://www.bbsmax.com/A/xl569l20Jr/ http://4hou.win/wordp ...
- 缓冲区溢出实例(一)--Windows
一.基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据.可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等 ...
- 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0
Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...
- 2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验
2018-2019-2 20165232<网络对抗技术>Exp1 缓冲区溢出实验 实验点1:逆向及Bof基础实践 实践任务 用一个pwn1文件. 该程序正常执行流程是:main调用foo函 ...
- Kali学习笔记22:缓冲区溢出漏洞利用实验
实验机器: Kali虚拟机一台(192.168.163.133) Windows XP虚拟机一台(192.168.163.130) 如何用Kali虚拟机一步一步“黑掉”这个windowsXP虚拟机呢? ...
随机推荐
- 【忍者算法】从生活到代码:解密链表大数相加的美妙算法|LeetCode第2题"两数相加"
从生活到代码:解密链表大数相加的美妙算法 从超市收银说起 想象你是一个超市收银员,正在计算两位顾客的购物总和.每位顾客的商品都按照从个位到高位的顺序摆放(比如54元就是先放4元商品,再放50元商品). ...
- Android高版本Service在后台一分钟被杀死
最近公司出现了一个Bug,Service在后台写log时候一分钟左右被杀死,或者运行一会就被杀死了,上网搜了一下原来是Android高版本为了保护电量,流量什么的,会在后台杀死这些Service,现在 ...
- Zookeeper、Hadoop、Hbase的启动顺序以及关闭顺序
启动顺序 Hadoop及hbase集群启动顺序 zookeepeer -> hadoop -> hbase 停止顺序 Hadoop及hbase集群关闭顺序 hbase -> hado ...
- C# USB 摄像头 OpenCV 视频picBox呈现,抓拍图像保存呈现。没有注释版本。
1.winform 应用程序,两个picturebox空间,一个用于视频呈现,一个用于抓拍呈现. 2.引用包OpenCvSharp4.OpenCvSharp4.Extensions.OpenCvSha ...
- QWidget的isHidden和isVisible
文章目录 QWidget的isHidden和isVisible 问题的出现 QWidget的show()函数 QWidget的isVisible和isHidden 源码追溯 QWidget的isHid ...
- 写于vue3.0发布前夕的helloworld之二
接着,继续走,来到了vm.$mount. 开始生成render函数,生成VNode,由于是第一次加载,所以patch机制为只删除前一个dom节点机制,下面都会讲到. 先到$mount: Vue.pro ...
- laravel-admin php artisan admin:install报错问题解决办法
问题描述:根据laravel-admin官方文档安装步骤,执行:php artisan admin:install 安装时报错. 其实是数据库创建特殊字符过长问题,laravel 5.4 改变了默认的 ...
- 最新活动 ISS 国际空间站 MAI-75 SSTV活动计划于2020年8月4日至5日
MAI-75 SSTV活动计划于2020年8月4日和5日举行 8月3日至9日这一周的最后宇航员时间表最近公布了,它显示了定于8月4日和5日进行的MAI-75活动.这是在Space X Demo-2脱 ...
- AI穿上身:苹果手表如何改变你的生活?
楔子:一个普通理工男的科技启示录 我是张三,一个标准的90后理工男.在这个日新月异的科技时代,我习惯用精密的逻辑和近乎机械的效率来审视世界.每天早上6点45分准时起床,每一分钟都被精确地规划,生活就像 ...
- 深入理解Hadoop读书笔记-2
背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...