进程崩溃打印

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相关推荐

  1. linux下开启程序崩溃生成core文件开关之ulimit详解

    运行服务器程序经常会出现崩溃,而我们不可能一天24小时都等着他出现.在实际运行中也不能总是使用gdb启动,毕竟gdb绑定运行会消耗很大一部分性能. 不过linux系统在程序崩溃时会生成一个coredu ...

  2. Linux C/C++程序崩溃bug调试方法

    C,C++程序最常见的崩溃问题就是内存问题,内存越界,访问空指针,野指针等都会造成程序崩溃.Linux系统中当程序运行过程中出现非法操作,系统会先发送对应的错误信号,每种错误信号都有默认的处理方式,比 ...

  3. android imageview图片崩溃,android - setImageResource导致应用程序崩溃 - 堆栈内存溢出...

    我试图做一个按钮,当单击它时会从一组卡中选择一个随机卡,并将其显示到ImageView中. 为此,我为它们的值和ID(可绘制的图像卡名称)提供了一个Card类. public class Carte ...

  4. GDB backtrace bt 查看程序crash堆栈信息

    8 查看栈信息 The call stack is divided up into contiguous pieces called stack frames, or frames for short ...

  5. linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈

    下面是一个小例子,说明了程序出现段错误时,如何打印程序的堆栈信息. #include #include #include #include static void WidebrightSegvHand ...

  6. MiniDump文件的创建、分析堆栈信息、定位错误、查看异常处理信息

    1.MiniDump文件的创建: 创建miniDump的方法有很多.可以通过MiniDumpCreateDumpWin32Api创建.必要参数为EXCEPTION_POINTERS结构,获取这个结构可 ...

  7. 栈windows linux,Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息...

    一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段. 因此,程序的日志系统需要侦测这种情况,在代码崩溃的时候获 ...

  8. 在Linux中利用backtrace信息解决程序崩溃问题

    转自:https://blog.csdn.net/jxgz_leo/article/details/53458366 一.导读 在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈 ...

  9. linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?

    问题 在 09 问中,我们开启了 coredump 功能,在 MySQL 崩溃时获得了有用的 coredump 信息. 那如果没开启 coredump,仅有 error log 中的堆栈信息,我们如何 ...

最新文章

  1. Copilot 真会砸了程序员的饭碗?
  2. Android应用程序进程启动过程的源代码分析(2)
  3. ubuntu系统安装gedit
  4. 北航计算机梅澜,水江澜-北京航空航天大学材料科学与工程学院
  5. C#读写txt文件的两种方法介绍[转]
  6. Python笔记-使用cython生成dll,C++进行调用
  7. (66)Verilog HDL模块参数化例化
  8. 外贸人不知道的Facebook广告营销技巧和营销工具
  9. LINUX编译x265:make-Makefiles.bash: ccmake: not found
  10. PHP实现pop3,用PHP实现POP3邮件的收取(二)
  11. 游戏直播用哪个录屏软件好?
  12. 前端的性能优化-笔记
  13. Ubuntu中安装和使用vim
  14. 是否应该删除Windows 7 Service Pack备份文件以节省空间?
  15. DCS是分布式控制系统的英文缩写(Distributed Control System)
  16. url中如果有引号的处理
  17. 分支过程灭绝概率matlab,某类遗传环境下的两性分支过程:有关伴Y基因的灭绝概率问题...
  18. COMPUTEX直击:戴尔笔记本新品迭出
  19. 原生JS实现淡出淡入效果
  20. android反编译修改教程,反编译教程

热门文章

  1. linux 7 bond0,Linux Shell脚本 CentOS 7 配置bond0
  2. 详解遗传算法与生产作业调度
  3. 使用Delphi编写自动关闭Windows信使服务窗体程序
  4. Java内存管理与垃圾回收
  5. 基于python的12306自动抢票系统的设计与实现
  6. UI控件之ToggleButton(开关按钮)和Switch(开关)
  7. linux程序独占桌面,桌面应用|14个可以提升Linux桌面体验的应用程序
  8. 什么是B008长上影线选股指标?
  9. ArcGIS中加载无偏移谷歌卫星影像!奥维官方插件与ArcGIS协同互动
  10. java 从后台下载xlsx格式excel 发现不可读取内容的解决方案