当前位置:网站首页>代码调试core-踩内存
代码调试core-踩内存
2022-07-06 19:03:00 【帅气滴点C】
定位方法:
- gdb:
- 通过gdb对内存打断点(watch) ,看看谁非法访问了该内存区域。然后逐步缩小范围。直到找到对应的函数段,比如:
- 比如发现0x800 地址被踩。
- 首先判断该地址是否合法,也就是0x800是否应该存在,如果不应该存在,则可以watch这个地址,也可以代码不断运行,期间不断打印该地址,看哪段代码修改了。
- 比如发现0x800 地址被踩。
- 局限
- 问题出现在启动阶段,来不及设断点,不好定位,
- 有些系统不支持gdb
- 被踩地址不固
- 通过gdb对内存打断点(watch) ,看看谁非法访问了该内存区域。然后逐步缩小范围。直到找到对应的函数段,比如:
- 类似内存泄漏的问题,先定界,后定位,通过内存proc信息(meminfo/media-mem)判断是具体的模块,内存段。也可以用MMU(linux下可以用mrotect)对特定区域进行保护
- 局限
- MMU保护的最小单位是一个内存页,有可能被踩区域较小,无法用mmu进行保护
- 局限
- 减法缩小范围,裁剪模块,修改应用程序,找到最小场景
- 加打印,打印出异常和怀疑的地址;也可以dump出被踩地址的数据,查看数据特征,根据数据特征分析从哪里来。
- valgrind+effence+ksan等工具
常见的问题
- 类型转换出错
- 比如小转大,包括常见的char和int,以及自定义结构体
- 包括形参
- 使用已经释放的地址
- 比如malloc或者没有申请控件就使用
- 申请的内存太小,不够用,类似与越界
如何避免
- 函数嵌套不要太深
- 代码要对称,malloc对应的位置一定要释放
- 数组大小要注意
边栏推荐
- postgresql之integerset
- Halcon instance to opencvsharp (C openCV) implementation -- bottle mouth defect detection (with source code)
- Lumion 11.0 software installation package download and installation tutorial
- 写作系列之contribution
- MySQL --- 常用函数 - 字符串函数
- 企业中台建设新路径——低代码平台
- 如何设计好接口测试用例?教你几个小技巧,轻松稿定
- MySQL
- Alibaba cloud middleware open source past
- FLIR blackfly s usb3 industrial camera: how to use counters and timers
猜你喜欢
leetcode:5. Longest palindrome substring [DP + holding the tail of timeout]
Stm32f4 --- PWM output
Data connection mode in low code platform (Part 1)
Infrared camera: juge infrared mag32 product introduction
Linear list --- circular linked list
Detailed explanation of line segment tree (including tested code implementation)
压缩 js 代码就用 terser
C语言练习题_1
How to build a 32core raspberry pie cluster from 0 to 1
记一次JAP查询导致OOM的问题分析
随机推荐
Pioneer of Web3: virtual human
MFC Windows 程序设计[147]之ODBC数据库连接(附源码)
#yyds干货盘点# 解决名企真题:最大差值
Rethinking of investment
Stm32f4 --- PWM output
数论 --- 快速幂、快速幂求逆元
Apifox,你的API接口文档卷成这样了吗?
6-6 vulnerability exploitation SSH security defense
MySQL
[server data recovery] data recovery case of a Dell server crash caused by raid damage
Leetcode:minimum_depth_of_binary_tree解决问题的方法
Lombok makes the pit of ⽤ @data and @builder at the same time
S120驱动器基本调试步骤总结
安全交付工程师
widerperson数据集转化为YOLO格式
KYSL 海康摄像头 8247 h9 isapi测试
The so-called consumer Internet only matches and connects industry information, and does not change the industry itself
Here comes a white paper to uncover the technology behind Clickhouse, a node with 10000 bytes!
How do I dump SoapClient requests for debugging- How to dump SoapClient request for debug?
3 -- Xintang nuc980 kernel supports JFFS2, JFFS2 file system production, kernel mount JFFS2, uboot network port settings, and uboot supports TFTP