【案例】由coredump引起的思考:程序的加载流程

背景

        小米项目的同事,最近遇到了一个crash问题,困扰较久,向我请求帮助。(其实是客户指定要求我来分析这个问题,该项目之前是由我负责的,帮客户解决很多较多crash问题。估计是实力得到了客户认可吧,哈哈,自嗨一波~~~Linux 调试进阶(多场景覆盖)_谢艺华的博客-CSDN博客)

问题描述

经验一: 与同事充分沟通,了解当前问题现状。

        描述:客户最近在测试过程中,在文件转移阶段,偶现coredump。

        仅仅从该描述而言,并不能有进一步的分析。于是我让同事将寄存器,栈空间的值,堆栈信息打印。如下:

(gdb)
(gdb) info register
x0             0x0                 0
x1             0x7fc3cb2050        548745715792
x2             0x0                 0
x3             0x8                 8
x4             0x0                 0
x5             0xffffffffffffffff  -1
x6             0xffffffffffffffff  -1
x7             0xffffffffffffffff  -1
x8             0x87                135
x9             0x6                 6
x10            0xffffffffffffffff  -1
x11            0xffffffffffffffff  -1
x12            0xffffffffffffffff  -1
x13            0xffffffffffffffff  -1
x14            0xffffffffffffffff  -1
x15            0xffffffffffffffff  -1
x16            0xffffffffffffffff  -1
x17            0xffffffffffffffff  -1
x18            0xffffffffffffffff  -1
x19            0xffffffffffffffff  -1
x20            0x7f7d01d450        547558118480
x21            0x7f7e4356b8        547579188920
x22            0x556005a670        366683203184
--Type <RET> for more, q to quit, c to continue without paging--
x23            0x55560cb2f8        366515892984
x24            0x55560c8000        366515879936
x25            0x556005a750        366683203408
x26            0x55560c8000        366515879936
x27            0x556005a718        366683203352
x28            0x55560cae00        366515891712
x29            0x7fc3cb2030        548745715760
x30            0x7fc3cb2050        548745715792
sp             0x7fc3cb2030        0x7fc3cb2030
pc             0x7f7e30121c        0x7f7e30121c <__GI_raise+204>
cpsr           0x1000              [ EL=0 SSBS ]
fpsr           0x10                16
fpcr           0x0                 0
(gdb) x /256xg $sp
0x7fc3cb2030:        0x0000007fc3cb2150        0x0000007f7e2ee4f8
0x7fc3cb2040:        0x0000007f7e435000        0x0000000000000000
0x7fc3cb2050:        0x0000000000001000        0x0000000000000000
0x7fc3cb2060:        0x0000000000000000        0x0000000000000000
0x7fc3cb2070:        0x0000000000000000        0x0000000000000000
0x7fc3cb2080:        0x0000000000000000        0x0000000000000000
0x7fc3cb2090:        0x0000000000000000        0x0000000000000000
0x7fc3cb20a0:        0x0000000000000000        0x0000000000000000
0x7fc3cb20b0:        0x0000000000000000        0x0000000000000000
0x7fc3cb20c0:        0x0000000000000000        0x0000000000000000
0x7fc3cb20d0:        0xfffffffe7fffffff        0xffffffffffffffff
0x7fc3cb20e0:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb20f0:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb2100:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb2110:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb2120:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb2130:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb2140:        0xffffffffffffffff        0xffffffffffffffff
0x7fc3cb2150:        0x0000007fc3cb22a0        0x0000007f7e4ff038
0x7fc3cb2160:        0x00000055560c8000        0x0000007fc3cb2368
0x7fc3cb2170:        0x0000007fc3cb2388        0x0000007f7e33ad7c
0x7fc3cb2180:        0x000000000000002d        0x0000000000000020
0x7fc3cb2190:        0x0000007f7e434430        0x000000000000002d
--Type <RET> for more, q to quit, c to continue without paging--
0x7fc3cb21a0:        0x0000007fc3cb21d0        0x0000007f7e33a198
0x7fc3cb21b0:        0x0000007f7e434430        0x0000000000000bd0
0x7fc3cb21c0:        0x0000007f7e4346f8        0x0000007f7e435028
0x7fc3cb21d0:        0x0000007fc3cb2210        0x0000007f7e33b49c
0x7fc3cb21e0:        0x000000000000002d        0x000000000000002d
0x7fc3cb21f0:        0x000000000000002d        0x0000007f7e434430
0x7fc3cb2200:        0x0000007f7e5cf7b8        0x0000000000000001
0x7fc3cb2210:        0x0000007fc3cb2250        0x0000007f7e32fbb0
0x7fc3cb2220:        0x0000007f7e434430        0x000000000000002d
0x7fc3cb2230:        0x0000007f7e435028        0x000000000000002d
0x7fc3cb2240:        0x0000007f7e5cf7b8        0x0000000000000001
0x7fc3cb2250:        0x0000007fc3cb22a0        0x0000007f7e4ff02c
0x7fc3cb2260:        0x00000055560c8000        0x0000007fc3cb2368
0x7fc3cb2270:        0x0000007fc3cb2388        0x000000556005a670
0x7fc3cb2280:        0x00000055560cb2f8        0x00000055560c8000
0x7fc3cb2290:        0x000000556005a750        0x0000007f7e4fef60
0x7fc3cb22a0:        0x0000007fc3cb22e0        0x0000007f7e4fcc0c
0x7fc3cb22b0:        0x00000055560c8000        0x0000007fc3cb2368
0x7fc3cb22c0:        0x0000007fc3cb2388        0x000000556005a670
0x7fc3cb22d0:        0x00000055560cb310        0x0000005560056ff0
0x7fc3cb22e0:        0x0000007fc3cb22f0        0x0000007f7e4fcc70
0x7fc3cb22f0:        0x0000007fc3cb2300        0x000000555600bdbc
0x7fc3cb2300:        0x0000007fc3cb23c0        0x0000005556012184
--Type <RET> for more, q to quit, c to continue without paging--
0x7fc3cb2310:        0x000000556005a670        0x000000556005ae60
0x7fc3cb2320:        0x0000000000000000        0x0000007f7fb26678
0x7fc3cb2330:        0x000000555607e818        0x0000007f8051ca80
0x7fc3cb2340:        0x000000556005a670        0x000000556006a480
0x7fc3cb2350:        0x0000000000000000        0x0000005556012184
0x7fc3cb2360:        0x000000556005a670        0x00000055560c64c8
0x7fc3cb2370:        0x000000556005a670        0x000000555600b850
0x7fc3cb2380:        0x0000000000000000        0x0000000000000000
0x7fc3cb2390:        0x0000000000000000        0x00000000ffffffff
0x7fc3cb23a0:        0x0000000000000000        0x0000000000000000
0x7fc3cb23b0:        0x0000000000000000        0xe48d6289cdcca000
0x7fc3cb23c0:        0x0000007fc3cb23e0        0x0000005555ff72dc
0x7fc3cb23d0:        0x00000055560c8000        0x0000007f7fb26678
0x7fc3cb23e0:        0x0000007fc3cb2460        0x000000555600a5f8
0x7fc3cb23f0:        0x00000055560cb348        0x00000055560caa28
0x7fc3cb2400:        0x00000055560cb418        0x0000007f7fb26678
0x7fc3cb2410:        0x0000007fc3cb2440        0x0000007f7f8546e0
0x7fc3cb2420:        0x000000556005a670        0x000000556005a750
0x7fc3cb2430:        0x000000555607e818        0x00000055560cae00
0x7fc3cb2440:        0x0000007fc3cb2460        0x000000556005e400
0x7fc3cb2450:        0x00000055560cb348        0x0000007f7e644a20
0x7fc3cb2460:        0x0000007fc3cb24f0        0x0000007f7e3035dc
0x7fc3cb2470:        0x000000556002c270        0x0000007f7e435000
--Type <RET> for more, q to quit, c to continue without paging--
0x7fc3cb2480:        0x00000000000002b3        0x0000007f7e432000
0x7fc3cb2490:        0x0000007f7e435b20        0x0000000000000000
0x7fc3cb24a0:        0x0000007f7e432000        0x0000007f805a25d8
0x7fc3cb24b0:        0x0000007f7e433648        0x0000000000000006
0x7fc3cb24c0:        0x0000007fc3cb24e0        0x00000055560cad60
0x7fc3cb24d0:        0x000000555606d120        0x0000005556077ca8
0x7fc3cb24e0:        0x000000556002f580        0xe48d6289cdcca000
0x7fc3cb24f0:        0x0000007fc3cb2560        0x0000007f7e30376c
0x7fc3cb2500:        0x000000555606c600        0x0000000000000000
0x7fc3cb2510:        0x0000005555f6ef40        0x0000000000000000
0x7fc3cb2520:        0x0000000000000000        0x0000000000000000
0x7fc3cb2530:        0x0000000000000000        0x0000000000000000
0x7fc3cb2540:        0x0000000000000000        0x0000000000000000
0x7fc3cb2550:        0x0000007f7e435b20        0x0000000100000000
0x7fc3cb2560:        0x0000007fc3cb2570        0x0000007f7e2ee87c
0x7fc3cb2570:        0x0000000000000000        0x0000005555f6ef78
0x7fc3cb2580:        0x0000000000000000        0x0000000000000000
0x7fc3cb2590:        0x0000005555f6ef40        0x0000000000000000
0x7fc3cb25a0:        0x0000000000000000        0x0000000000000000
0x7fc3cb25b0:        0x0000000000000000        0x0000007f7e432000
0x7fc3cb25c0:        0x0000007fc3cb2600        0x0000007fc3cb26c8
0x7fc3cb25d0:        0x00000003c3cb25f0        0x0000005555f6e4e0
0x7fc3cb25e0:        0x0000007f7f1d00b0        0x000000555606c600
(gdb)
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49

#1  0x0000007f7e2ee4f8 in __GI_abort () at abort.c:79
#2  0x0000007f7e4ff038 in __gnu_cxx::__verbose_terminate_handler() ()
   from /adaptive/usr/lib/libstdc++.so.6
#3  0x0000007f7e4fcc0c in ?? () from /adaptive/usr/lib/libstdc++.so.6
#4  0x0000007f7e4fcc70 in std::terminate() ()
   from /adaptive/usr/lib/libstdc++.so.6
#5  0x000000555600bdbc in std::thread::~thread (this=<optimized out>,
    __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/thread:157
#6  abup::ota::ftm::TransferTaskBase::~TransferTaskBase (this=0x556005a670,
    __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/application/ftm/src/task/adm_ftm_task_base.hpp:192
#7  0x0000005556012184 in abup::ota::ftm::TransferTaskSelf::~TransferTaskSelf (
    this=0x556005a670, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/application/ftm/src/task/adm_ftm_task_self.cpp:67
#8  0x0000005555ff72dc in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x556005ae60)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/ext/atomicity.h:84
--Type <RET> for more, q to quit, c to continue without paging--
#9  std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (
    this=0x556006a4b0, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/shared_ptr_base.h:733
#10 std::__shared_ptr<abup::ota::ftm::TransferTaskBase, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x556006a4a8, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/shared_ptr_base.h:1183
#11 std::shared_ptr<abup::ota::ftm::TransferTaskBase>::~shared_ptr (
    this=0x556006a4a8, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/shared_ptr.h:121
#12 std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> >::~pair (this=0x556006a4a0, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_pair.h:211
#13 __gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::destroy<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > (__p=0x556006a4a0, this=<optimized out>)
--Type <RET> for more, q to quit, c to continue without paging--
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/ext/new_allocator.h:156
#14 std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > > >::destroy<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > (__p=0x556006a4a0, __a=...)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/alloc_traits.h:531
#15 std::_Rb_tree<abup::ota::ftm::EcuType, std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> >, std::_Select1st<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > >, std::less<abup::ota::ftm::EcuType>, std::allocator<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::_M_destroy_node (__p=0x556006a480, this=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_tree.h:646
#16 std::_Rb_tree<abup::ota::ftm::EcuType, std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> >, std::_Select1st<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > >, std::less<abup::ota::ftm::EcuType>, std::allocator<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::_M--Type <RET> for more, q to quit, c to continue without paging--
_drop_node (this=<optimized out>, __p=0x556006a480)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_tree.h:654
#17 std::_Rb_tree<abup::ota::ftm::EcuType, std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> >, std::_Select1st<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > >, std::less<abup::ota::ftm::EcuType>, std::allocator<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::_M_erase (this=<optimized out>, __x=0x556006a480)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_tree.h:1921
#18 std::_Rb_tree<abup::ota::ftm::EcuType, std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> >, std::_Select1st<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > >, std::less<abup::ota::ftm::EcuType>, std::allocator<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::_M_erase (__x=0x556005e400,
    this=0x55560cad60 <abup::ota::ftm::TransferManager::instance()::transferManager+824>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_tree.h:1919
#19 0x000000555600a5f8 in std::_Rb_tree<abup::ota::ftm::EcuType, std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> >, s--Type <RET> for more, q to quit, c to continue without paging--
td::_Select1st<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > >, std::less<abup::ota::ftm::EcuType>, std::allocator<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::~_Rb_tree (
    this=0x55560cad60 <abup::ota::ftm::TransferManager::instance()::transferManager+824>, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_tree.h:990
#20 std::map<abup::ota::ftm::EcuType, std::shared_ptr<abup::ota::ftm::TransferTaskBase>, std::less<abup::ota::ftm::EcuType>, std::allocator<std::pair<abup::ota::ftm::EcuType const, std::shared_ptr<abup::ota::ftm::TransferTaskBase> > > >::~map (
    this=0x55560cad60 <abup::ota::ftm::TransferManager::instance()::transferManager+824>, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/jenkins_cross_compile_dir/sysroots/cortexa53-crypto-poky-linux/usr/include/c++/10.2.0/bits/stl_map.h:302
#21 abup::ota::ftm::TransferManager::~TransferManager (
    this=0x55560caa28 <abup::ota::ftm::TransferManager::instance()::transferManager>, __in_chrg=<optimized out>)
    at /data/ota_soft/jenkins/workspace/MI-MASTER-CD/application/ftm/src/adm_ftm_manager.cpp:108
#22 0x0000007f7e3035dc in __run_exit_handlers (status=0,
    listp=0x7f7e433648 <__exit_funcs>,
--Type <RET> for more, q to quit, c to continue without paging--
    run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true)
    at exit.c:108

#23 0x0000007f7e30376c in __GI_exit (status=<optimized out>) at exit.c:139
#24 0x0000007f7e2ee87c in __libc_start_main (main=0x5555f6e4e0 <main>, argc=3,
    argv=0x7fc3cb26c8, init=<optimized out>, fini=<optimized out>,
    rtld_fini=<optimized out>, stack_end=<optimized out>)
    at ../csu/libc-start.c:348
#25 0x0000005555f6ef78 in _start () at ../sysdeps/aarch64/start.S:93

有兴趣的朋友,可以观察一下栈空间中,黄色字体和红色字体的规律,以及和调用栈的相关性。是不是很有趣。

分析

从上面信息中,仔细观察可知,存在两个异常。

异常点一:执行abup::ota::ftm::TransferTaskBase::~TransferTaskBase文件转移实例化对象析构时,出现了abort 信号,造成了coredump。

        我们知道C++中实例化对象,在对象销毁时,会进行析构。但是文件转移实例化对象,属于全局变量,之后在进程退出时,由系统进行回收。但是结合日志文件分析,程序流程,并没有执行main 函数中的Deinit模块(用于释放各模块资源),因此进行析构时,会出现abort 异常。从而引出新的问题点:main 函数没有走到return,为什么会进行全局对象的析构?

异常点二:为什么函数调用栈的起始是_start()

        我们知道正常的堆栈信息,调用栈的最上层接口一般是main函数,或子线程的入口接口。但是_start()我们应该是很少遇到的。疑问点:_start() 表示什么?当前的函数调用栈是正常的吗?

程序的加载流程

在《程序员的自我修养》6.5节中,曾这样简述linux加载ELF过程。

  1. Bash进程会调用fork()系统调用创建一个新的进程,然后新的进程调用execve()系统调用执行指定的ELF文件
  2. execve()内部会检查ELF文件前128个字节,确认文件格式,选择相应的文件装载处理过程。比如,ELF可执行文件,则选择load_elf_binary();a.out可执行文件就选择load_aout_binary();脚本文件,就选择load_script()。其中load_elf_binary()流程如下。
    1. 检查ELF可执行文件格式的有效性。比如魔数,程序头表中段的数量。
    2. 寻找动态连接的”.interp“段,设置动态连接器路径。
    3. 根据ELF可执行文件的程序头表的描述,对ELF文件进行映射,比如代码,数据,只读数据。
    4. 初始化ELF进程环境,比如进程启动时EDX寄存器的地址应该是DT_FINI的地址。
    5. 将系统调用的返回地址修改成ELF可执行文件的入口点,这个入口点取决于程序的链接放方式,对于静态链接的ELF可执行文件,这个程序入口就是ELF文件的文件头中e_entry所指的地址;对于动态链接的ELF可执行文件,程序入口点就是动态连接器
  3. load_elf_binary()执行完毕后,返回至exexve。此时已经将返回地址改为了被转载的ELF程序的入口地址了,所以继续执行新的程序。

经上述描述,ELF可执行文件的第一个代码段,应该就是入口点。我们结合以下代码验证。

#include<stdlib.h>
#include<stdio.h>
int main()
{
    printf("hello world");
    return 0;
}

注:若不添加 -static -lc选项,部分符号是无法看到的。

由ELF文件头可知,entry point address 为 0x400a50。test.log 内容如test.log

由上述汇编可知,ELF的入口地址是_start。该接口主要做以下操作。

  1. 初始化操作,比如栈。
  2. libc_csu_fini,libc_csu_init,main函数的地址分别保存在 r8,rcx,rdi寄存器中。
  3. 调用libc_start_main接口。

通过观察libc_start_main的汇编实现可知。它内部的调用顺序应该为init,main,exitexit内部会执行 __run_exit_handlers用于资源的回收,比如析构。实际上调用栈应该为:

_start()
         --> libc_start_main()
                                --> libc_csu_init
                                --> main
                                --> exit
                                    --> __run_exit_handlers

思路

        结合上述内容分析,目前怀疑是main 函数在执行过程中,因为触发了某些条件,导致,main 直接退出。执行了后续的exit --> __run_exit_handlers,在资源析构时,触发了abort信号,导致系统产生了coredump

        按照这个思路分析,怀疑是某个线程,调用了类似exit函数,导致系统默认为是进程正常退出。跳过了main后续操作,直接执行exit 后续内容。

按照这个思路,进行如下验证:

  1. 在接受任务线程中做了修改。若收到任务,则调用exit()。
  2. 对文件转移对象析构,进行断点。

        经验证,当下发任务后,会按照预期,调用exit(),之后进行资源回收,调用析构函数。执行到断电时,发现函数调用栈信息和上述大体一致。 _start()->__libc_start_main->__GI_exit

目前结论:某个线程调用了exit函数。需要客户和我们一起去排查。可以通过打桩,进行压测排查。

参考文档

ARM汇编笔记(2)——函数调用规则_arm函数调用规范-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/148561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用SSH和SCP传输文件———详细入门教学实践

确保你已经在本地机器上安装了SSH客户端和SCP工具。 获取远程虚拟机的IP地址或主机名以及登录凭据&#xff08;用户名和密码或私钥&#xff09;。 打开终端&#xff08;命令提示符&#xff09;并输入以下命令来传输文件&#xff1a; scp /本地路径/文件 用户名远程虚拟机IP地…

运动蓝牙耳机哪个品牌好?这五款骨传导耳机表现还不错!

作为一个经常跑步运动的人&#xff0c;总感觉运动能够让人暂时远离城市的喧嚣&#xff0c;同时运动也是一种特别好的舒压方法。但跑步的时候如果没有音乐助燃&#xff0c;那是没有灵魂的&#xff0c;这也许就是现代年轻人的矫情吧&#xff0c;我在运动的时候经常会佩戴骨传导耳…

nvm安装node,查看npm版本报错

nvm安装node&#xff0c;使用npm -v报如上图错误&#xff0c;是因为Node版本过高导致&#xff0c;可以降低node版本&#xff0c;使用低一级版本的node. nvm use 16.13.0后来我单独安装node 20.9.0就成功了&#xff0c;不再使用nvm安装Node

mfc140u.dll丢失怎么修复?4种亲测有效的方法分享

在计算机使用过程中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是某些重要的dll文件丢失。DLL文件是动态链接库文件&#xff0c;它们包含了许多程序运行所需的函数和资源。当这些文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行。本文将详细介绍…

完全未接触过软件测试的人,培训两个月就可上岗,这现实吗?

如果你想两个月能学完是可以的&#xff0c;但是只能做一些简单的功能测试&#xff0c;但也只限下面这四种情况 1.自身基础较好&#xff0c;自控力较强 比如一个计算机专业的学生要入行软件测试&#xff0c;可能就不需要进行入门培训了&#xff0c;自己找点视频看看就能很快上…

没有 SegWit 和 Taproot 的比特币序数

序号 &#xff08;Ordinals&#xff09;已成为 BTC 圈子中创建不可替代令牌&#xff08;NFT&#xff09;的热门话题。 它的主要特点是将 NFT 本身完全存储在链上。 我们表明原始的比特币协议已经可以支持它。 Ordinals 不需要任何重大更改&#xff0c;包括 SegWit 和 Taproot。…

骨传导蓝牙耳机哪款好?这五款骨传导耳机闭眼入都不会错!

随着科技的发展&#xff0c;数码产品更新换代的速度也是越来越快&#xff0c;如今无线蓝牙耳机已经占据主流&#xff0c;特别是运动爱好者&#xff0c;很多人都会为自己挑选一款好用的运动耳机&#xff0c;而骨传导耳机异军突起&#xff0c;凭借听歌不入耳、佩戴舒适稳固等特性…

nodejs+express重定向

前言&#xff1a; 本篇代码中需要安装的依赖包包括&#xff1a;request、express 1.常用重定向方法 nodejs中的重定向可以使用.redirect()方法&#xff0c;该方法中可以传两个参数&#xff1a;code和path&#xff0c;code指重定向时&#xff0c;当前访问的这个接口的返回码3…

开发板上网详细教程

开发板上网详细教程 PC端操作开发板操作 写在前面 今天想配置开发板的boa服务器&#xff0c;需要下载sudo apt-get install bison flex&#xff0c;但是一直报错&#xff0c;就蒙蔽了&#xff0c;后来想想真不应该啊&#xff0c;电脑和开发板通信没问题&#xff0c;但也只是如此…

Git笔记简化版

起源 Git是目前世界上最先进的分布式版本控制系统。林纳斯-托瓦兹在开发linux系统时有很多人想有一个平台进行版本控制。当时同类型的版本控制软件是BitKeeper&#xff0c;bitKeep是不开源的。当林纳斯团队无法免费使用它时&#xff0c; 林纳斯花费了一个月左右时间就开发出了…

【算法】最短路径——迪杰斯特拉 (Dijkstra) 算法

目录 1.概述2.代码实现2.1.节点类2.2.邻接矩阵存储图2.3.邻接表存储图2.4.测试 3.扩展3.1.只计算一对顶点之间的最短路径3.2.获取起点到其它节点具体经过的节点 4.应用 本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;在图论中&#xff0c;最短…

个人微信机器人接口

请求URL&#xff1a; http://域名地址/modifyGroupName 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是String登录实例标识chatRoom…

unity UGUI无限循环滚动居中

最近在做一个ui循环滚动的功能&#xff0c;网上找了半天脚本感觉都和我实际需求不太符合&#xff0c;自己花费一些时间完成了这个功能记录一下。下面开始正题 &#xff0c;我是采用unity自带组件Scroll View来完成&#xff0c;首先设置Scroll View如下图 面板层级结构如下 然…

java springBoot实现RabbitMq消息队列 生产者,消费者

1.RabbitMq的数据源配置文件 # 数据源配置 spring:rabbitmq:host: 127.0.0.1port: 5672username: rootpassword: root#消息发送和接收确认publisher-confirms: truepublisher-returns: truelistener:direct:acknowledge-mode: manualsimple:acknowledge-mode: manualretry:ena…

mysql---主从复制和读写分离

主从复制 主从复制&#xff0c;修改&#xff0c;表里的数据&#xff1a;主mysql上的数据&#xff0c;新增都会同步到从mysql上面试题&#xff1a;mysql的主从复制的模式&#xff1a; 1、异步复制&#xff1a;mysql的默认复制就是异步复制。只要执行完之后&#xff0c;客户端提…

自动化测试Mock神器:轻松模拟HTTP请求..

一、背景 在日常测试过程中或者研发开发过程中&#xff0c;目前接口暂时没有开发完成&#xff0c;测试人员又要提前介入接口测试中&#xff0c;测试人员不仅仅只是简单的编写测试用例&#xff0c;也可以通过一些mock的方法进行来提前根据接口测试的情况进行模拟返回接口的信息…

软件测试/测试开发丨接口自动化测试学习笔记,加密与解密

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/28019 一、原理 在得到响应后对响应做解密处理&#xff1a; 如果知道使用的是哪个通用加密算法的话&#xff0c;可以自行解决。如果不了解对应的加密算法…

终于有人把VMware虚拟机三种网络模式讲清楚了!

前段时间VMware更新了&#xff0c;你用上最新版了吗&#xff1f; 有几个网工在操作中遇到过各种各样的问题。 比如说由于公司服务器重启导致出现下面的问题&#xff1a;在Xshell里连接虚拟机映射时连接失败&#xff1b;能够连接上虚拟机的映射地址&#xff0c;但git pull时报…

企业常用的几种FTP传输加速方式,最后一种百倍提速

在数字化时代&#xff0c;FTP传输协议仍然是企业之间进行文件传输的重要方式之一。但是&#xff0c;传统的FTP传输速度较慢&#xff0c;对于大文件和海量数据的传输更是显得力不从心。为了提高FTP传输速度&#xff0c;企业们通常会采取一些加速方式。本文将介绍几种企业常用的F…

考研分享第3期 | 211本378分上岸大连理工电子信息经验贴

考研分享第3期 | 211本378分上岸大连理工电子信息经验贴 一、个人信息 姓名&#xff1a;Ming 本科院校&#xff1a;某211学校电子信息工程学院 电子科学与技术专业 上岸院校&#xff1a;大连理工大学 电子信息与电气工程学部 电子信息&#xff08;0854&#xff09; 择校意…