《Linux Device Drivers》第四章 调试技术——note

时间:2014-09-24 13:41:36   收藏:0   阅读:320
1.本章知识点


2.常用反汇编技术
2.1oops错误定位
   (1)首先在编译生成内核的时候同时生成了一个vmlinux,使用gdb。
    在内核配置时,make menuconfig 要打开complie with debug info选项。
    注意这行: PC is at skb_release_data+0x74/0xc4
    这告诉我们,skb_release_data函数有0xc4这么大,而Oops发生在0x74处。 那么我们先看一下skb_release_data从哪里开始:
    #grep skb_release_data ./System.map
    c0282af4 t skb_release_data
    于是我们知道在系统出现错误时程序指针在 c0282af4+0x74=c0282b68
    (2)然后用gdb查看,gdb ./vmlinux (在linux目录下执行),进入调试模式。
    gdb$ b *0xc0282b68
    Breakpoint 1 at 0xc0282b68: file net/core/skbuff.c ,line312
    这就是告诉我们在哪个文件,在哪一行。如此知道了错误的位置,具体的原因带解决。
    (2)反汇编
     gdb$ disassemble 0xc0282b68


2.2反编译某一行
    先readelf -a vmlinux | grep setup_arch得到相关信息:
    12707: c0351020 543 FUNC GLOBAL DEFAULT 9 setup_arch
    其中,c0351020 为起始地址,543为长度(10进制),
    然后使用objdump -d --start-address=0xc0351020 --stop-address=0xc035123f vmlinux


2.3反汇编某个文件
在kernel目录下执行命令
$make help | grep lst
会有
dir/file.lst    - Build specified mixed source/assembly target only
                    (requires a recent binutils and recent build (System.map))
即make xxx.lst 即可反汇编某个文件
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!