arm平台根据栈进行backtrace的方法
一、 背景 二、 backtrace 1. 栈帧 2. 编译优化 3. 通过追踪栈变化回溯函数 4. 程序实现 三、 栈保护 四、 参考资料 本文主要介绍在arm平台回溯函数调用栈(backtrace)的方法。 一、 背景 嵌入式设备开发过程中,难免会遇到各种死机问题。这类问题的定位一直是开发人员的噩...
一、 背景 二、 backtrace 1. 栈帧 2. 编译优化 3. 通过追踪栈变化回溯函数 4. 程序实现 三、 栈保护 四、 参考资料 本文主要介绍在arm平台回溯函数调用栈(backtrace)的方法。 一、 背景 嵌入式设备开发过程中,难免会遇到各种死机问题。这类问题的定位一直是开发人员的噩...
一、预备知识 二、实验环境 三、malloc 3.1 没有malloc就没有堆 3.2 malloc(x) 四、strace, brk 和 sbrk 4.1 多次malloc 4.2 自行实现malloc 五、丢失的16字节 5.1 从源码找答案(RTFSC)#...
一、预备知识 二、实验环境 三、栈 四、堆 五、可执行程序的位置 六、命令行参数和环境变量 6.1 数组变量argv和env是相邻的吗? 6.2 第一个命令行参数紧挨着数组变量env吗? 七、栈真的是向下生长吗? 八、/proc 九、下节预告 十、继续阅读 十一、原文链接 这是虚拟内存系列文章的第三篇。...
一、预备知识 二、实验环境 三、剖析一个简单的Python脚本 1. Python中的字节对象(bytes object) 1.1 字节和字符串(bytes vs str) 1.2 一切都是对象 2. 执行read_write_heap.py脚本 ...
一、实验环境 二、预备知识 三、虚拟内存 四、剖析一个简单的C程序 strdup 进程的虚拟内存空间多大 proc文件系统 mem文件 maps文件 pid 五、替换进程的字符串 /proc探究 ...
本文简要介绍左移导致的溢出问题。 实际项目中需要计算SD卡中某个目录的大小,并判断该目录所占空间是否超过SD卡总容量的一半。 测试过程中经常发现误报,该目录所占空间远小于SD卡容量一半的时候,就上报占用空间过半的事件。 排查发现原来是计算的时候移位导致了溢出。问题代码如下: unsigned int total_space_in_mb; unsigned long long used_s...
不怕不知道,就怕不知道自己不知道。 设备A(发送方)和设备B(接收方)通过串口通讯,如下图所示,使用COBS进行编解码主要是为了报文分割(解决粘包半包问题)。 开发和测试期间,A和B之间通信均正常。等到A设备批量生产的时候,极个别A设备和B无法正常通信。 第一反应是A和B的COBS编解码库(A和B由不同公司开发)会不会有问题,比如发送方编码错误或者接收方解码错误。于是把A编码后的报...
通过mongoose下载文件的时候,概率出现下载文件不完整的情况。 软件交互流程如下: 浏览器 <----HTTP连接----> web服务器mongoose <----本地TCP连接---->cgi进程 抓包发现,问题出现的时候,cgi进程发送给mongoose的文件就是不完整的。但是通过strace命令看,cgi进程是读完了整个文件并且都通过系统接口se...
代码编译的时候,编译服务器莫名其妙的报以下错误: fatal error: error writing to /tmp/ccGjoKTF.s:No space left on device 奇怪了,编译脚本中并没有往tmp目录写文件呀! 仔细看了下错误信息,这个ccGjoKTF.s应该是编译过程的中间文件,文件名是随机值。 然而makefile中并未要求保留汇编代码。 写了个de...
本文主要介绍arm平台curl交叉编译方法。 基于curl + openssl + zlib 的方式组建arm上的https客户端,其中curl作为http客户端,openssl提供https支持,zlib负责处理gzip压缩的http报文。 编译目录结构如下: curl-7.29.0、openssl-OpenSSL_1_0_2g和zlib-1.2.8是待编译的源码 libs用...