Linux反汇编根据程序崩溃堆栈信息定位问题2
进程崩溃打印
ifotond: unhandled page fault (11) at 0x00000000, code 0x017
pgd = c5770000
[00000000] *pgd=85cd8835, *pte=00000000, *ppte=00000000
CPU: 0 PID: 14275 Comm: ifotond Not tainted 4.9.11 #1
Hardware name: Freescale i.MX6 UltraLite (Device Tree)
task: c447aec0 task.stack: c5730000
PC is at 0xb6c46cf8
LR is at 0x63f28
pc : [<b6c46cf8>] lr : [<00063f28>] psr: a0000030
sp : bee21b68 ip : 000781ec fp : bee21c5c
r10: 00077528 r9 : 01d7ec99 r8 : 00000fa8
r7 : 00000000 r6 : 00000001 r5 : 00000001 r4 : 0007ab3c
r3 : 00000000 r2 : b6fad000 r1 : 00000000 r0 : 00000000
Flags: NzCv IRQs on FIQs on Mode USER_32 ISA Thumb Segment user
Control: 10c53c7d Table: 85770059 DAC: 00000055
CPU: 0 PID: 14275 Comm: ifotond Not tainted 4.9.11 #1
Hardware name: Freescale i.MX6 UltraLite (Device Tree)
[<c010e540>] (unwind_backtrace) from [<c010b61c>] (show_stack+0x18/0x1c)
[<c010b61c>] (show_stack) from [<c0113300>] (__do_user_fault+0x84/0xcc)
[<c0113300>] (__do_user_fault) from [<c01135b8>] (do_page_fault+0x270/0x314)
[<c01135b8>] (do_page_fault) from [<c0101324>] (do_DataAbort+0x3c/0xbc)
[<c0101324>] (do_DataAbort) from [<c010c41c>] (__dabt_usr+0x3c/0x40)
Exception stack(0xc5731fb0 to 0xc5731ff8)
1fa0: 00000000 00000000 b6fad000 00000000
1fc0: 0007ab3c 00000001 00000001 00000000 00000fa8 01d7ec99 00077528 bee21c5c
1fe0: 000781ec bee21b68 00063f28 b6c46cf8 a0000030 ffffffff
可以看出第一现场的PC值已经被修改,所以只能看下一条LR 63f28地址存放的指令。
00063e08 <remote_upgrade_app>:63e08: e92d4bf0 push {r4, r5, r6, r7, r8, r9, fp, lr}63e0c: e28db01c add fp, sp, #2863e10: e24dd0d8 sub sp, sp, #216 ; 0xd863e14: e52de004 push {lr} ; (str lr, [sp, #-4]!)63e18: fafeb305 blx 10a34 <__gnu_mcount_nc>63e1c: e30a4b3c movw r4, #43836 ; 0xab3c63e20: e3404007 movt r4, #763e24: e5d45000 ldrb r5, [r4]63e28: e3550000 cmp r5, #063e2c: 0a000002 beq 63e3c <remote_upgrade_app+0x34>63e30: e3a00000 mov r0, #063e34: e24bd01c sub sp, fp, #2863e38: e8bd8bf0 pop {r4, r5, r6, r7, r8, r9, fp, pc}63e3c: ebffbdf7 bl 53620 <param_get_binflag>63e40: e3500000 cmp r0, #063e44: 0afffff9 beq 63e30 <remote_upgrade_app+0x28>63e48: e1a00005 mov r0, r563e4c: ebff03e0 bl 24dd4 <tsp_search_record>63e50: e5d03030 ldrb r3, [r0, #48] ; 0x3063e54: e3530000 cmp r3, #063e58: 0afffff4 beq 63e30 <remote_upgrade_app+0x28>63e5c: e3a06001 mov r6, #163e60: e5c46000 strb r6, [r4]63e64: ebffbde1 bl 535f0 <param_get_binserver>63e68: e1a07000 mov r7, r063e6c: ebffbdaf bl 53530 <param_get_binport>63e70: e1a08000 mov r8, r063e74: ebffbdd1 bl 535c0 <param_get_binname>63e78: e1a09000 mov r9, r063e7c: ebffbdc3 bl 53590 <param_get_binusr>63e80: ebffbdb6 bl 53560 <param_get_binpasswd>63e84: e1a01005 mov r1, r563e88: e3a02064 mov r2, #100 ; 0x6463e8c: e24b00e4 sub r0, fp, #228 ; 0xe463e90: ebfe97f8 bl 9e78 <_init+0x1ec>63e94: e58d9000 str r9, [sp]63e98: e3061fc4 movw r1, #28612 ; 0x6fc463e9c: e1a02007 mov r2, r763ea0: e1a03008 mov r3, r863ea4: e3401007 movt r1, #763ea8: e24b00e4 sub r0, fp, #228 ; 0xe463eac: ebfe9911 bl a2f8 <_init+0x66c>63eb0: e3041560 movw r1, #17760 ; 0x456063eb4: e24b00e4 sub r0, fp, #228 ; 0xe463eb8: e3401007 movt r1, #763ebc: ebfe98aa bl a16c <_init+0x4e0>63ec0: e2507000 subs r7, r0, #063ec4: 0a000002 beq 63ed4 <remote_upgrade_app+0xcc>63ec8: ebfe9783 bl 9cdc <_init+0x50>63ecc: e3700001 cmn r0, #163ed0: 1a000015 bne 63f2c <remote_upgrade_app+0x124>63ed4: e3a02064 mov r2, #100 ; 0x6463ed8: e3a01000 mov r1, #063edc: e24b0080 sub r0, fp, #128 ; 0x8063ee0: e3a05001 mov r5, #163ee4: ebfe97e3 bl 9e78 <_init+0x1ec>63ee8: e24b101c sub r1, fp, #2863eec: e30307b8 movw r0, #14264 ; 0x37b863ef0: e1a02005 mov r2, r563ef4: e3a03000 mov r3, #063ef8: e56150c9 strb r5, [r1, #-201]! ; 0xc963efc: e3400006 movt r0, #663f00: ebfef1a7 bl 205a4 <dlyrun_add2list1>63f04: e3060f48 movw r0, #28488 ; 0x6f4863f08: e1a02005 mov r2, r563f0c: e3a01000 mov r1, #063f10: e3400007 movt r0, #763f14: ebfe9849 bl a040 <_init+0x3b4>63f18: e3a03000 mov r3, #063f1c: e1a00007 mov r0, r763f20: e5c43000 strb r3, [r4]
-> 63f24: ebfe97c4 bl 9e3c <_init+0x1b0>
-> 63f28: eaffffc0 b 63e30 <remote_upgrade_app+0x28>63f2c: e30a3b44 movw r3, #43844 ; 0xab4463f30: e3032ca4 movw r2, #15524 ; 0x3ca463f34: e3403007 movt r3, #763f38: e3402006 movt r2, #663f3c: e1a01006 mov r1, r663f40: e5830004 str r0, [r3, #4]63f44: e1a00003 mov r0, r363f48: e5832000 str r2, [r3]63f4c: ebfe989e bl a1cc <_init+0x540>63f50: eaffffb6 b 63e30 <remote_upgrade_app+0x28>
可以看出是bl 9e3c <_init+0x1b0>出现了问题,但由于代码中添加了goto语句,导致反汇编结果不是很明朗,所以需要慢慢来分析一下。
先拿到代码中函数dlyrun_add2list1,然后在remote_upgrade_app中查找,可看到63f14: ebfe9849 bl a040 <_init+0x3b4>是一个printf打印函数,参数r0指向内存地址,r1为0,r2为r5的值是1,代码如下:
printf("ent down! path is %s err is %d\n ", path, error);
下面继续分析,可能是 system(buff);,但是buff数组没有问题,这里很奇怪,执行完系统调用后继续回到remote_upgrade_app函数继续执行,所以就不知道bl 9e3c <_init+0x1b0>指向哪个系统调用函数。
只能用最笨的方法,删除某一个系统调用代码然后反汇编看哪句指令消失,这样就定位出代码是pclose(fp);引起死机,查看代码发现是fp为NULL导致,由于下面代码导致:
FILE *fp = popen(tmp, "r");if(!fp){// 执行失败goto end;}end:file_down_finish(NULL, DOWNLOAD_ERROR);pclose(fp);
这里就真相大白了,popen失败了必死。
Linux反汇编根据程序崩溃堆栈信息定位问题2相关推荐
- linux下开启程序崩溃生成core文件开关之ulimit详解
运行服务器程序经常会出现崩溃,而我们不可能一天24小时都等着他出现.在实际运行中也不能总是使用gdb启动,毕竟gdb绑定运行会消耗很大一部分性能. 不过linux系统在程序崩溃时会生成一个coredu ...
- Linux C/C++程序崩溃bug调试方法
C,C++程序最常见的崩溃问题就是内存问题,内存越界,访问空指针,野指针等都会造成程序崩溃.Linux系统中当程序运行过程中出现非法操作,系统会先发送对应的错误信号,每种错误信号都有默认的处理方式,比 ...
- android imageview图片崩溃,android - setImageResource导致应用程序崩溃 - 堆栈内存溢出...
我试图做一个按钮,当单击它时会从一组卡中选择一个随机卡,并将其显示到ImageView中. 为此,我为它们的值和ID(可绘制的图像卡名称)提供了一个Card类. public class Carte ...
- GDB backtrace bt 查看程序crash堆栈信息
8 查看栈信息 The call stack is divided up into contiguous pieces called stack frames, or frames for short ...
- linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈
下面是一个小例子,说明了程序出现段错误时,如何打印程序的堆栈信息. #include #include #include #include static void WidebrightSegvHand ...
- MiniDump文件的创建、分析堆栈信息、定位错误、查看异常处理信息
1.MiniDump文件的创建: 创建miniDump的方法有很多.可以通过MiniDumpCreateDumpWin32Api创建.必要参数为EXCEPTION_POINTERS结构,获取这个结构可 ...
- 栈windows linux,Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息...
一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段. 因此,程序的日志系统需要侦测这种情况,在代码崩溃的时候获 ...
- 在Linux中利用backtrace信息解决程序崩溃问题
转自:https://blog.csdn.net/jxgz_leo/article/details/53458366 一.导读 在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈 ...
- linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?
问题 在 09 问中,我们开启了 coredump 功能,在 MySQL 崩溃时获得了有用的 coredump 信息. 那如果没开启 coredump,仅有 error log 中的堆栈信息,我们如何 ...
最新文章
- Copilot 真会砸了程序员的饭碗?
- Android应用程序进程启动过程的源代码分析(2)
- ubuntu系统安装gedit
- 北航计算机梅澜,水江澜-北京航空航天大学材料科学与工程学院
- C#读写txt文件的两种方法介绍[转]
- Python笔记-使用cython生成dll,C++进行调用
- (66)Verilog HDL模块参数化例化
- 外贸人不知道的Facebook广告营销技巧和营销工具
- LINUX编译x265:make-Makefiles.bash: ccmake: not found
- PHP实现pop3,用PHP实现POP3邮件的收取(二)
- 游戏直播用哪个录屏软件好?
- 前端的性能优化-笔记
- Ubuntu中安装和使用vim
- 是否应该删除Windows 7 Service Pack备份文件以节省空间?
- DCS是分布式控制系统的英文缩写(Distributed Control System)
- url中如果有引号的处理
- 分支过程灭绝概率matlab,某类遗传环境下的两性分支过程:有关伴Y基因的灭绝概率问题...
- COMPUTEX直击:戴尔笔记本新品迭出
- 原生JS实现淡出淡入效果
- android反编译修改教程,反编译教程
热门文章
- linux 7 bond0,Linux Shell脚本 CentOS 7 配置bond0
- 详解遗传算法与生产作业调度
- 使用Delphi编写自动关闭Windows信使服务窗体程序
- Java内存管理与垃圾回收
- 基于python的12306自动抢票系统的设计与实现
- UI控件之ToggleButton(开关按钮)和Switch(开关)
- linux程序独占桌面,桌面应用|14个可以提升Linux桌面体验的应用程序
- 什么是B008长上影线选股指标?
- ArcGIS中加载无偏移谷歌卫星影像!奥维官方插件与ArcGIS协同互动
- java 从后台下载xlsx格式excel 发现不可读取内容的解决方案