DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  异常诊断与调试

1 2 3 4 5 ··· 10 下一页

摘要:omit-frame-pointer 开启该选项,主要是用于去掉所有函数SFP(Stack Frame Pointer)的,即在函数调用时不保存栈帧指针SFP,代价是不能通过backtrace进行调试根据堆栈信息了。通过去掉SFP,可以提高程序运行速度,达到优化程序的目的。如果要打开栈指针,使用 - 阅读全文
posted @ 2023-07-19 18:26 DoubleLi 阅读(284) 评论(0) 推荐(0) 编辑

摘要:离奇的std::map、std::set崩溃 现象描述定位之路1、和windows调用比较,没发现任何问题2、修改cmakelists.txt,发现也没有什么可以改的,能改的怎么改结果都一样3、最笨的办法之一用上,写一段这样的代码:4、面向互联网大法编程,百度、微软必应(不FQ,不能狗狗),发现一个 阅读全文
posted @ 2023-07-10 17:59 DoubleLi 阅读(252) 评论(0) 推荐(0) 编辑

摘要:GCC “stack smashing detected”机制 相信使用C/C++语言开发软件的程序猿们都经历过‘栈溢出’的问题。‘栈溢出’问题通常十分的隐蔽,有的时候问题复现也十分的困难。每当软件出现莫名其妙的问题时,总是有人怀疑是不是栈溢出了,但是问题的排查又十分的困难,所以,‘栈溢出’就是广大 阅读全文
posted @ 2023-04-21 09:54 DoubleLi 阅读(70) 评论(0) 推荐(0) 编辑

摘要:关键词:stack-protector、stack-protector-strong、stack-protector-all等等。 1. gcc栈保护机制stack-protector简介 gcc提供了栈保护机制stack-protector。关于stack-protector包含三个选项,分别是s 阅读全文
posted @ 2023-04-21 09:51 DoubleLi 阅读(711) 评论(0) 推荐(0) 编辑

摘要:使用 -fstack-protector 选项的编译脚本 [root@Betty stack_smash_test]# cat mk.sh #!/bin/bash g++ -O2 -Wall -m32 -shared -Wl,-fpic captureexception.cpp -o libcapt 阅读全文
posted @ 2023-04-20 16:44 DoubleLi 阅读(229) 评论(0) 推荐(0) 编辑

摘要:这几天在做总结,把三年前写的一个定位案例,翻了出来。回想起定位这个问题时的场景,领导催得紧,自己对很多东西又不熟悉,所以当时面临的压力还是很大的。现在回想起来感慨还是很多的,我们在遇到任何一个问题,一定不要放弃。还记得在产品线做开发时,学到的一些项目知识,任何一个bug,他总有一天会爆发出来。任何一 阅读全文
posted @ 2023-04-20 14:55 DoubleLi 阅读(248) 评论(0) 推荐(0) 编辑

摘要:最近项目中遇到一个全局变量被莫名修改的问题,代码排查了好久居然没发现,确实有些惭愧,这时候使用一些辅助工具帮助定位就很有必要也比较快速精准!全局变量被修改无非就三种原因:1、自己写的代码修改的;2、数组越界导致的;3、变量定义的时候没有初始化; 排查手段:手段一:踩内存周边地址排查排查被踩内存周边地 阅读全文
posted @ 2023-04-20 14:49 DoubleLi 阅读(390) 评论(0) 推荐(0) 编辑

摘要:简介 Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Sanitizers项目本是LLVM项目的一部分,但GNU也将该系列工具加入到了自家的GCC编译器中。GCC从4 阅读全文
posted @ 2023-04-20 14:43 DoubleLi 阅读(545) 评论(0) 推荐(0) 编辑

摘要:目录 即看即用 详细 简介 Valgrind工具详解 安装 使用 检测内存泄漏 其他内存问题 memcheck 工具的常用选型 其他选项 附录 其他类似工具 实例分析: 03. 使用未初始化的内存 04. 使用野指针 05. 动态内存越界访问 06. 分配空间后没有释放 07. 不匹配使用delet 阅读全文
posted @ 2023-04-20 14:28 DoubleLi 阅读(385) 评论(0) 推荐(0) 编辑

摘要:一 代码 #include<iostream> #include<stdlib.h> using namespace std; void func(){ int *x=(int *)malloc( 10 * sizeof ( int ) ) ; x[10]=0; } int main(){ func 阅读全文
posted @ 2023-04-20 14:14 DoubleLi 阅读(24) 评论(0) 推荐(0) 编辑

摘要:1、程序编译,链接后生成二进制可执行程序。二进制可执行文件以elf格式实现排列。可以通过readelf -S xxxx查看具体section的划分,粗略划分如下图所示。 在这些section中,代码段是只读的,自然也就不存在代码(指令)被改写的情况。数据段,堆,栈区具有读写的属性,但是数据段和堆一般 阅读全文
posted @ 2023-04-20 09:51 DoubleLi 阅读(134) 评论(0) 推荐(0) 编辑

摘要:操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等机制,例如存在DEP(NX)的话就不能直接执行栈上的数据,存在ASLR的话各个系 阅读全文
posted @ 2023-04-19 18:35 DoubleLi 阅读(124) 评论(0) 推荐(0) 编辑

摘要:在写 C/C++ 代码的时候,经常需要为程序分配动态内存,难免就会发生内存泄漏的情况,本文就来说一下如何防止 C/C++ 内存泄漏! 在说防止内存泄漏前,先说一下什么是内存泄漏。 一、什么是内存泄漏? 通俗一点说就是,程序中动态分配的内存并没有正确的释放。 内存泄漏(Memory leak)是在计算 阅读全文
posted @ 2023-04-19 18:29 DoubleLi 阅读(209) 评论(0) 推荐(0) 编辑

摘要:ASAN全称:Address Sanitizer,google发明的一种内存地址错误检查器。目前已经被集成到各大编译器中。 本文分享自华为云社区《内存定位利器-ASAN使用小结》,作者:云存储开发者支持团队。 1.什么是ASAN ASAN全称:Address Sanitizer,google发明的一 阅读全文
posted @ 2023-04-19 18:22 DoubleLi 阅读(157) 评论(0) 推荐(0) 编辑

摘要:前言 对于 C 语言来说,内存被踩是比较常见的问题,轻则普通变量被改写程序逻辑出错,重则指针变量被改写引发指针解引用出现未定义行为风险; 定位内存被踩一直是棘手的难题,如果出现程序跑死,一般可以通过堆栈信息来定位:1)查看跑死的调用链,确定跑死代码的位置;2)根据pc指针找到具体代码;3)走查代码分 阅读全文
posted @ 2023-04-19 18:00 DoubleLi 阅读(563) 评论(0) 推荐(0) 编辑

摘要:当程序因某种异常停止运行时,我们要做的就是找到程序停止的具体位置,分析导致程序停止的原因。对于 C、C++ 程序而言,异常往往出现在某个函数体内,例如 main() 主函数、调用的系统库函数或者自定义的函数等。要知道,程序中每个被调用的函数在执行时,都会生成一些必要的信息,包括: 函数调用发生在程序 阅读全文
posted @ 2023-04-18 19:19 DoubleLi 阅读(323) 评论(0) 推荐(0) 编辑

摘要:gdb 调试技巧:定位程序卡死问题 最近遇到一个程序卡死的问题,借助 gdb 轻松定位,供大家参考。 遇到程序卡死不退处,可能不知道卡死在什么地方,如果程序非常简单,也许 printf 大法就可以很快定位。但是对于大型程序,尤其是一些框架程序,printf 大法可能就力不从心了。 实际的程序很复杂, 阅读全文
posted @ 2023-04-18 19:07 DoubleLi 阅读(267) 评论(0) 推荐(0) 编辑

摘要:在使用动态库开发部署时,遇到最多的问题可能就是 undefined symbol 了,导致这个出现这个问题的原因有多种多样,快速找到原因,采用对应的方法解决是本文写作的目的。 可能的原因 依赖库未找到这是最常见的原因,一般是没有指定查找目录,或者没有安装到系统查找目录里 链接的依赖库不一致编译的时候 阅读全文
posted @ 2023-04-04 09:57 DoubleLi 阅读(4966) 评论(0) 推荐(0) 编辑

摘要:今天去面试被问到冒泡排序的最好,最坏,平均时间复杂度;tcp有哪些窗口,拥塞的原因,TCP拥塞控制的思想;最后还问了linux下如何查看某个进程下所有线程的情况;进程和线程的区别;其实都没怎么答好,都看过想过,却没有实践并落到实处。这篇可以看作原创也可以看作转载,主要是自己记录一下。 问题: 我的程 阅读全文
posted @ 2023-03-14 20:06 DoubleLi 阅读(2181) 评论(0) 推荐(0) 编辑

摘要:背景 在开发项目的一个feature时,发现有一个线程hang住,一直无法向元数据管理模块发送心跳,导致线程所在的机器被drop掉,组里的一个同学使用gdb找到了hang住的原因,于是自己也决定学一下这种方法。 测试程序 启动两个线程,竞争互斥锁,其中一个线程拿到锁之后不释放,两个线程因为死锁必然会 阅读全文
posted @ 2023-03-14 20:04 DoubleLi 阅读(538) 评论(0) 推荐(0) 编辑

1 2 3 4 5 ··· 10 下一页