
内存管理
文章平均质量分 55
sdsszk
这个作者很懒,什么都没留下…
展开
-
静态库链接两个静态库不报错解决方法
https://blog.youkuaiyun.com/zxpoiu/article/details/115178193 https://docs.oracle.com/cd/E37934_01/html/E37313/ld-1.html-whole-archive 可以把 在其后面出现的静态库包含的函数和变量输出到动态库,–no-whole-archive 则关掉这个特性。比如你要把 liba.a libb.a libc.a 输出到 libabc.dll(或libabc.so)时应该这么写:libabc.dll:l原创 2022-07-01 11:25:36 · 446 阅读 · 0 评论 -
利用--wrap重定向函数排查内存泄露
背景 在使用GCC编译器时,如果不想工程使用系统的库函数,例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free函数,可以有两种方法: (1). 使用LD_PRELOAD环境变量:可以设置共享库的路径,并且该库将在任何其它库之前加载,即这个动态库中符号优先级是最高的。 (2). 使用GCC的–wrap选项:对symbol使用包装函数(wrapper function),任何对symbol未定义的引用(undefined reference)会被解析成__wrap_symbol,而任何原创 2021-05-27 15:23:31 · 736 阅读 · 0 评论 -
strace开源库移植及其使用
什么是strace 按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 strace底层使用内核的ptrace特性来实现其功能。 在运维的日常工作中,故障处理和问题诊断是个主要的内容,也是必备的技能。strace作为一种动态跟踪工具,能够帮助运维高效地定位进程和服务故障。它像是一个侦探,通过系统调用的蛛丝马迹,告诉你异常的真相。 移植strace开源库 首先官网现在strace源码原创 2021-02-08 16:03:57 · 678 阅读 · 0 评论 -
dlopen动态加载动态库
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去学习。 2、生产动态链接库 编译参数 gcc -fPIC -shared 例如将如下程序编译为动态链接库libcacu原创 2020-12-01 11:19:59 · 1571 阅读 · 0 评论 -
应用层打印PC指针LR指针解决段错误总结
标题1.需求的产生 写程序难免会出现段错误的情况,这时候很想知道,到底在什么地方崩溃了,对于代码很少,或者你很有把握的时候,或许用二分法配合printf就可以搞定了;而对于非常复杂的代码,比如像Xserver这样的程序,可能就不太好定位了; (本文讨论的情况都是针对arm环境,并且gdb不方便使用的情况) 2. 解决思路 思路其实很简单,对于用户态段错误的原因,大约可以分为两种, a) 没有权限访问这个地址; b) 访问的地址没有映射,比如NULL地址; 当出现这两种原创 2020-11-18 10:35:26 · 2960 阅读 · 0 评论 -
Linux内存管理及其内存分布
1、LF文件 在学习之前我们先看看ELF文件。 ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具体到每一个结构不同。 下面我们就从整体上看看这3种格式从文件内容上存储的方式,spec上有张图是比较经典的:如上图: 其实从文件存储的格式来说,上面的两种view实际上是一样的,Segment实际上就是由section组成的,将相应的一些section映射到一起就叫segment了,就是说seg原创 2020-11-01 22:18:06 · 323 阅读 · 0 评论