调试
文章平均质量分 93
mayi_xiaochuan
这个作者很懒,什么都没留下…
展开
-
gdb 加载动态库方法
"这样的提示,这通常是库搜索路径设置错误,GDB载入了错误的库文件导致的。4. 查看so库的加载路径是否正确可使用info sharedlibrary命令,如果已找到对应的文件则其From和To的加载地址会有值,并且右边路径显示的就是加载文件所在的地址,这个时候,如果so库文件含符号信息,则syms Read的值为Yes,否则为No,如果未找到对应的文件则From和To的地址为空,syms Read的值为No,此时右边路径显示的是Coredump文件中库文件路径。但在载入过程中有库版本不匹配的提示。转载 2023-03-16 10:17:49 · 3308 阅读 · 1 评论 -
dmalloc实例测试
dmalloc实例测试编译生成的dmalloc文件放到output目录下(此处只是为了测试,根据自己的情况放在哪都行,只要自己能找到就ok)准备:提前将test程序文件夹挂载到arm设备的tmp目录下(目的是为了将生成的crash文件保存下来)(1)在设备中进入output/bin/下执行:./dmalloc -l /tmp/dmalloc_crash_test...原创 2020-02-29 18:02:41 · 367 阅读 · 0 评论 -
dmalloc编译
dmalloc是一个简单易用的C/C++内存leak检查工具,以一个运行库的方式发布。dmalloc能够检查出直到程序运行结束还没有释放的内存,并且能够精确指出在哪个源文件的第几行。dmalloc 主页:http://dmalloc.com支持的平台:AIX, BSD/OS, DG/UX, Free/Net/OpenBSD, GNU/Hurd, HPUX, Irix, Linux,...原创 2020-02-28 17:59:17 · 773 阅读 · 0 评论 -
4.从寄存器看x86_64和I386中函数调用中参数传递
x86_64基本使用寄存器存储函数参数,寄存器不够才入栈;而i386将所有参数保存在栈上,通过gcc的扩展功能__attribute__((regparm()))即可实现部分参数的寄存器传递。调试语法:--《深入理解计算机系统(原书第2版)》代码#include <stdio.h>#include <stdlib.h>int v1 = 1;...原创 2019-12-02 21:10:30 · 1209 阅读 · 0 评论 -
1.GDB调试--以汇编语言为例
#rpm -qa |grepgdb下载:安装#tar -zxvf#./configure#make使用GDB以汇编语言调试为例汇编语言实现CPUID指令CPUIDcpuid是IntelPentinum以上级CPU内置的一个指令(486级以下的CPU不支持),他用于识别某一类型的CPU,它能返回CPU级别,型号,CPU步进以及CPU字串信息,从此命...转载 2019-12-02 15:18:39 · 1546 阅读 · 2 评论 -
3.GDB查看栈信息
栈:是程序存放数据内存区域之一,特点是LIFO(后进先出)。PUSH:入栈POP:出战使用场景:1.保存动态分配的自动变量使用栈2.函数调用时,用栈传递函数参数,半寸返回地址,返回值代码sum.c#include <stdio.h> #include <ctype.h> #include <stdlib.h>...转载 2019-12-02 14:51:04 · 1035 阅读 · 0 评论 -
2.汇编语言系统调用过程
以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化。如何在汇编调用glibc的函数?其实也很简单,根据c convention call的规则,参数反向压栈,call,然后结果保存在eax里头。注意,保存的是地址。在汇编里头,一切皆地址。当我们调用 result = printf( "%d %d", 12, a )的时候,编译器默认是这样...转载 2019-12-02 14:22:27 · 434 阅读 · 0 评论 -
gdb编译及使用
gdb源码下载:ftp://sourceware.org/pub/gdb/releases/1.下面为8.3的编译进入gdb8.3目录下:第一步:编译配置(若已经编译过一次,若要编译其他平台,请重新解压编译;因为编译过之后参数已经被修改,编译其他平台会报错)1.编译在本机上运行gdb,处理的目标平台为arm-linux的gdb版本,生成的执行文件前缀为arm-linux-,安装目...原创 2019-11-26 11:38:48 · 5405 阅读 · 0 评论 -
栈内存问题
栈内存问题排查:编译时增加-g 和安全编译选项-fstack-protector-g:生成调试信息,用于后续gdb调试;-fstack-protector:在编译时会在函数栈框中插入一个canary,并实现了通过这个canary来检测函数栈是否被破坏;如果程序执行过程中出现越界执行到canary随机数,程序会立马结束;makefile如下:target = stack_1...原创 2019-11-21 20:46:24 · 142 阅读 · 0 评论 -
coredump内核转储配置
1、什么是coredump:我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下会产生一个叫做core的文件。通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成的一个文件,...原创 2019-11-20 19:51:11 · 271 阅读 · 0 评论