原创:kylin_zeng 原创kylin_zeng:http://blog.youkuaiyun.com/kylin_fire_zeng
参考:http://wenku.baidu.com/view/3f829a20bcd126fff7050b0a.html
http://hi.baidu.com/comcat/item/833ad9c75f4daf7688ad9e8e
反汇编
faulty.ko
(
arm-linux-objdump -D faulty.ko > faulty.dis
;
cat
faulty.dis
)可以看到如下的语句如下:
反汇编hello.ko( arm-linux-objdump -D hello.ko > faulty.dis )可以看到如下的语句如下:反汇编
00000000 <init_module>:
0: e1a0c00d mov ip, sp
4: e92dd830 push {r4, r5, fp, ip, lr, pc}
8: e24cb004 sub fp, ip, #4 ; 0x4
c: e3a04000 mov r4, #0 ; 0x0
10: ea000003 b 24 <init_module+0x24>
14: e1a01004 mov r1, r4
18: e59f0020 ldr r0, [pc, #32] ; 40 <init_module+0x40>
1c: ebfffffe bl 0 <printk>
20: e2844001 add r4, r4, #1 ; 0x1
24: e59f3018 ldr r3, [pc, #24] ; 44 <init_module+0x44>
28: e5933000 ldr r3, [r3]
2c: e1540003 cmp r4, r3
30: bafffff7 blt 14 <init_module+0x14>
34: e3a00000 mov r0, #0 ; 0x0
38: e5800000 str r0, [r0] ///这里错了
3c: e89da830 ldm sp, {r4, r5, fp, sp, pc}
40: 00000032 .word 0x00000032
44: 00000000 .word 0x00000000
faulty.dis
)可以看到如下的语句如下:
反汇编hello.ko( arm-linux-objdump -S -D hello.ko > faulty.dis )可以看到如下的语句如下:
反汇编
static int __init yuer_init(void)
{
int i;
for(i=0; i<nbr; i++)
20: e2844001 add r4, r4, #1 ; 0x1
24: e59f3018 ldr r3, [pc, #24] ; 44 <init_module+0x44>
28: e5933000 ldr r3, [r3]
2c: e1540003 cmp r4, r3
30: bafffff7 blt 14 <init_module+0x14>
{
printk(KERN_ALERT "Hello, How are you. %d\n", i);
}
*(int*)0=0;
34: e3a00000 mov r0, #0 ; 0x0
38: e5800000 str r0, [r0]
return 0;
}
faulty.ko
(
arm-linux-objdump -D faulty.ko > faulty.dis
;
cat
faulty.dis
)可以看到如下的语句如下:
利用arm-none-linux-gnueabi-gdb 调试,如下:
arm-none-linux-gnueabi-gdb vmlinux
[ 1023.520000] LR is at atmel_tasklet_func+0x10/0x690
在gdb下键入命令 : l *atmel_tasklet_func+0x10(注意:这里的‘l’是字母“L”,由于字体的原因看起来像‘1’)