linux 内核崩溃处理

2019-07-13 09:06发布

pc : [1.txt
c0034818 T __kmalloc ... c00082a8 t quiet_kernel /*最开始的是虚拟地址*/ ...
bf000000  t $a [cdd] .. 由此可看代码崩溃在xxx.ko 2.定位崩溃在xxx.ko中的哪个函数 arm-linux-objdump -D cdd.ko >2.txt
00000000 0: e1a0c00d mov ip,sp //编译地址,编译后的指令,汇编语言 编译地址+0xbf000000 = 存放地址 0000009c 9c: e1a0c00d mov ip,sp a0: e92dd8f0 push {r4,r5,r6,r7,fp,ip,lr,pc} ... b8: e5c43000 strb r3,[r4] ------此处出现问题
由此知道崩溃在cdd_open函数 3. 反汇编内核代码了解cdd_open被调用流程 arm-linux-objdump -D vmlinux >3.txt
cdd_open压栈,push {r4,r5,r6,r7,fp,ip,lr,pc} 这8个数据就是你要压的数据,lr寄存器的值是函数调用完要返回的地址 根据lr,查看上一次调用cdd_open的函数 以此类推,可以得到调用流程