Linux下定位内存踩踏问题的一种方法

Linux下定位内存踩踏问题的一种方法

  • 演示代码(main.cpp)
  • 编译并执行
  • 输出

我们在Linux下用C/C++开发具有一定复杂性的系统时,需要集成多个部门开发的SDK。内存越界的问题,往往让人头疼。本文提供了一种思路,用来定位内存踩踏。

  • 开发者应该清楚哪块内存不应该被写入(或padding一块只读区域)
  • 使用munlock函数对该区域加锁
  • 该区域一旦被写入,就会触发段错误,通过调用栈即可定位

演示代码(main.cpp)

#include <thread>
#include <stdio.h>
#include <sys/mman.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <cerrno>
#include <cstring>
#include <iostream>
#include <assert.h>void run(char *ptr)
{ptr[100]=100; //非法写入printf("success\n");
}
int main()
{int page_count=64;const int page_size = sysconf(_SC_PAGE_SIZE); //int mem_size=page_size*page_count;char * sys_config=(char*)aligned_alloc(page_size,mem_size);int ret=mprotect(sys_config,mem_size, PROT_READ);//需要页对齐assert(ret==0);auto t=new std::thread(run,sys_config); //在别的线程中操作该内存t->join();delete t;
}

编译并执行

g++ -ggdb -o demo main.cpp  -lpthread
ulimit  -c unlimited
./demo
gdb ./demo  core
(gdb) bt
#0  run (ptr=0x7cd0e21b3000 "") at main.cpp:14
(gdb) quit
vim main.cpp +14

输出

12 void run(char *ptr)
13 {
14     ptr[100]=100; //非法写入
15     printf("success\n");
16 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT基础监控与各IT体系模块的深化关系及其作用详解

IT基础监控作为运维工作的“眼睛”和“耳朵”&#xff0c;始终贯穿于自动化、容器化、云原生、团队协作及智能运维的实践中。以下是对IT基础监控与各IT体系模块之间关系的进一步补充和深化。 1. IT基础监控与自动化的深化关系 在自动化运维的实践中&#xff0c;基础监控不仅是…

C++11_C++回顾

范围for 对于一个有范围的集合而言&#xff0c;由程序员来说明循环的范围是很多余的&#xff0c;有时还很容易犯错误。因此C中引入了基于范围for循环。for循环后的括号由冒号":"分为两部分&#xff0c;第一部分是范围内用于迭代的变量&#xff0c;第二部分则表示被迭…

智慧餐饮系统架构的设计与实现

随着科技的不断发展&#xff0c;智慧餐饮系统在餐饮行业中扮演着越来越重要的角色。智慧餐饮系统整合了信息技术&#xff0c;以提高餐饮企业的管理效率、客户服务质量和市场竞争力。本文将探讨智慧餐饮系统架构的设计与实现&#xff0c;并探讨其在餐饮行业中的应用前景。 架构…

大文件上传

分片上传 将文件分为多个大小相等的小块&#xff0c;提高并发 前端将切割的每个分片按顺序传送给后端 后端收到分片后&#xff0c;记录特征信息&#xff08;MD5&#xff09; 按序号进行拼接 断点续传 将文件分为几个小块 每次上传时记录一个块信息&#xff0c;例如文件MD…

matlab采用不同数值方法求解微分方程

1、内容简介 略 60-可以交流、咨询、答疑 欧拉方法、改进欧拉、RK4、米尔斯坦方法求解微分方程 2、内容说明 略 lc; close all; clear all; % 参数赋值 global a global b global h a 1; b 2; Ni 1000; % 总步数 h 0.001; % 步长Xt1(1:Ni) 0; Xt2(…

【前端素材】推荐优质后台管理系统PORTAL平台模板(附源码)

一、需求分析 后台管理系统是一种具有多层次结构的软件系统&#xff0c;用于管理网站、应用程序或系统的后台操作和管理。下面是对后台管理系统的分层次、详细分析&#xff1a; 第一层&#xff1a;用户界面层 登录界面&#xff1a;提供用户登录验证&#xff0c;确保只有经过授…

MySQL 数据优化技巧:提升百万级数据聚合统计速度

MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度 MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度摘要引言索引优化1. 使用合适的索引类型2. 聚簇索引的应用 查询优化3. 减少数据检索范围4. 避免全表扫描 数据库设计优化5. 合理划分数据表6. 使用分区表 …

AI如何与企业应用交互

人工智能&#xff08;AI&#xff09;与企业应用的交互可以通过多种方式实现&#xff0c;以下是一些常见的方式&#xff1a; 1、智能助理和聊天机器人&#xff1a;企业可以在其应用程序中集成智能助理或聊天机器人&#xff0c;以帮助用户解决常见问题、获取信息或执行特定任务。…

算法训练营day35, 二叉搜索树的范围和

package main type TreeNode struct { Val int Left *TreeNode Right *TreeNode } //938. 二叉搜索树的范围和 func rangeSumBST(root *TreeNode, low int, high int) int { sum : 0 if root nil { return sum } //中序遍历左中右处理即可 var searchBST func(node *Tr…

零基础学Python入门教程非常详细(从小白到高级),入门必看

目录&#xff1a;基础 第一章-第五章&#xff08;5.1-5.4&#xff09;&#xff1a;简介、配置与基础知识 第六章&#xff1a;判断语句 第一章&#xff1a;Python的概述 1.1&#xff1a;什么是Python? Python它是一种直译式&#xff0c;面向对象&#xff0c;解释式的脚本语…

NASA Earthdata wget批量下载

1 wegt下载 GNU Wget 1.21.4 for Windows (eternallybored.org) 2 创建your .urs_cookies and .dodsrc文件 只需要创建.urs_cookies文件 其实&#xff0c;通过txt可以直接创建 这个文件你想放到哪里&#xff0c;就放到哪里 Create .urs_cookies file: On Mac/Linux: cd ~ o…

QT TCP通讯客户端与服务端

服务端 // 自定义如下 private:QTcpServer *tcpserver; //TCP服务器QTcpSocket *tcpsocket;// TCP通讯socketQString GetLocalIpAddress(); // 获取本机的IP地址private slots:void clientconnect();void clientdisconnect();void socketreaddata();void newconnection();void …

[C++]C++计算时间

在C中&#xff0c;有几种方法可以用来统计代码的运算时间&#xff1a; 使用std::chrono库&#xff1a; C11引入了chrono库&#xff0c;用于处理时间相关的操作。通过使用std::chrono::system_clock和std::chrono::duration_cast&#xff0c;可以很容易地测量代码段的执行时间。…

图片上叠加文字

在一个原有图片上叠加上指定的文字 编写一个工具类实现文字叠加的功能&#xff0c;叫ImageUttils import cn.hutool.core.img.Img; import cn.hutool.core.io.resource.Resource;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Val…

绝对路径拼接漏洞 [NISACTF 2022]babyupload

打开题目 最开始以为是文件上传的漏洞 结果发现无论我们上传什么文件都会显示bad filename 去网上看了大佬的wp知道 我们直接去看源代码得到提示 /source 那我们去访问一下这个路径看看 得到一个下载文件 用记事本打开得到 源代码如下 from flask import Flask, request, r…

软考46-上午题-【数据库】-数据查询语言DQL1

一、SQL数据查询功能 SELECT语句的语法如下&#xff1a; 【注意】&#xff1a; 使用DISTINCT选项可以去重&#xff1b; form子句中出现多个基本表或视图时&#xff0c;系统首先执行笛卡尔积操作。 下面的查询示例均以这些表为基础 1-1、投影查询-SELECT 【回顾】&#xff1a;…

设计模式(七)装饰模式

相关文章设计模式系列 1.装饰模式简介 装饰模式介绍 装饰模式是结构型设计模式之一&#xff0c;不必改变类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能&#xff0c;是继承的替代方案之一。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象…

【日常聊聊】Sora- 探索AI视频模型的无限可能

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;技术解析 方向二&#xff1a;应用场景 方向三&#xff1a;未来展望 方向四&#xff1a;伦理与创意 方向…

[linux][异常检测] hung task, soft lockup, hard lockup, workqueue stall

hung task&#xff0c;soft lockup&#xff0c;hard lockup&#xff0c;workqueue stall 是 linux 内核中的异常检测机制&#xff0c;这 4 个检测均是通过时间维度上的检测来判断异常。 在时间维度上的检测机制&#xff0c;有两个核心的点&#xff1a; &#xff08;1&#xff…

web组态插件

插件演示地址&#xff1a;http://www.byzt.net 关于组态软件&#xff0c;首先要从组态的概念开始说起。 什么是组态 组态&#xff08;Configure&#xff09;的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xf…