ELF文件包括:
(1)可重定位的目标文件
(2)可执行的目标文件
(3)可被共享的目标文件
可以用file命令来看目标文件是否是ELF文件
在linux下,用readelf来看ELF头部或者其它各section的内容,用objdump来对指定的内容(.text, .data等)进行反汇编。
但是mac os X下没有这两个命令,可以用brew来安装,brew update && brew install binutils,然后用greadelf和gobjdump。
这些工具都存在于 :
(前提是安装了android studio,然后安装了ndk工具包)readelf常用指令
将打印信息放在该目录的2.txt里面。如果没有箭头后面的内容,则打印内容在cmd里则不会创建文本。
readelf -a C:\Users\SHENG\Desktop\1\libtest-lib.so >2.txt
-a:显示so文件所有信息
-h:elf文件头
-l:Program header。动态加载时需要的信息
-S:Section header。静态加载分析时需要的信息
-e:同样头信息,elf header,section header
-s:显示符号表
-d:显示动态节
ELF文件包括:
(1)可重定位的目标文件
(2)可执行的目标文件
(3)可被共享的目标文件
可以用file命令来看目标文件是否是ELF文件
在linux下,用readelf来看ELF头部或者其它各section的内容,用objdump来对指定的内容(.text, .data等)进行反汇编。
但是mac os X下没有这两个命令,可以用brew来安装,brew update && brew install binutils,然后用greadelf和gobjdump。
转载于:https://www.cnblogs.com/zlcxbb/p/6059517.html
Linux调试之(四)objdump+vmlinux
1.空指针代码hello.c
#include <linux/module.h> #include <linux/init.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("baoli"); MODULE_DESCRIPTION("hello world module"); static int __init hello_init(void) { int * p = 0; printk(KERN_WARNING "hello world.\n"); *p = 1; return 0; } static void __exit hello_exit(void) { printk(KERN_WARNING "hello exit!\n"); } module_init(hello_init); module_exit(hello_exit);
2. 编译&安装模块
编译:
make M=drivers/input/ modules
安装:
isnmod hello.ko
killed安装失败,用dmesg内核日志,可以看到内核跑出了Oops异常:
给出了原因:不能访问NULL指针** oops异常打印**
rk3399_idpad:/data # insmod hello.ko [ 57.542999] type=1400 audit(1546369016.140:40): avc: denied { module_load } for pid=1504 comm="insmod" path="/data/hello.ko" dev="mmcblk0p15" ino=14 scontext=u:r:su:s0 tcontext=u:object_r:sytem_data_file:s0 tclass=system permissive=1 [ 57.555523] hello world. [ 57.555549] Internal error: Accessing user space memory outside uaccess.h routines: 96000045 [#1] PREEMPT SMP [ 57.576280] Modules linked in: hello(O+) [ 57.580257] CPU: 4 PID: 1504 Comm: insmod Tainted: G O 4.4.83 #173 [ 57.587567] Hardware name: Rockchip RK3399 Excavator Board edp (Android) (DT) [ 57.594703] task: ffffffc03fb46800 task.stack: ffffffc078998000 [ 57.600635] PC is at hello_init+0x18/0x30 [hello] [ 57.605354] LR is at hello_init+0x10/0x30 [hello] [ 57.610068] pc : [<ffffff80009f2018>] lr : [<ffffff80009f2010>] pstate: 60400145 [ 57.617463] sp : ffffffc07899bc60 [ 57.620781] x29: ffffffc07899bc60 x28: 0000000000000001 [ 57.626130] x27: ffffffc03e93ff48 x26: 0000000000000000 [ 57.631488] x25: ffffffc03e93ff00 x24: 0000000000000000 [ 57.636834] x23: ffffff8008f550a0 x22: ffffff8008f46000 [ 57.642180] x21: ffffffc03fb283c0 x20: ffffff8008f550a0 [ 57.647525] x19: ffffff80009f2000 x18: 4ae6dd13fab428fb [ 57.652870] x17: 0000007fa278e104 x16: ffffff80081c92b4 [ 57.658215] x15: 0000000000000000 x14: 0ffffffffffffffe [ 57.663560] x13: 0000000000000010 x12: 0101010101010101 [ 57.668905] x11: 7f7f7f7f7f7f7f7f x10: fefefefefeff5c6e [ 57.674251] x9 : 7f7f7f7f7f7f7f7f x8 : ffffff80082fb318 [ 57.679606] x7 : ffffff8008f8d320 x6 : ffffff8009314b7f [ 57.684951] x5 : 0000000000000000 x4 : 0000000000000000 [ 57.690307] x3 : 0000000000000000 x2 : cb88537fdc8ba653 [ 57.695652] x1 : 0000000000000001 x0 : 0000000000000000 [ 57.700999] [ 57.700999] PC: 0xffffff80009f1f98: [ 57.705964] 1f98 ******** ******** ******** ******** ******** ******** ******** ******** [ 57.714353] 1fb8 ******** ******** ******** ******** ******** ******** ******** ******** [ 57.722736] 1fd8 ******** ******** ******** ******** ******** ******** ******** ******** [ 57.731118] 1ff8 ******** ******** a9bf7bfd 910003fd 58000100 95dde284 d2800000 52800021 [ 57.739496] 2018 b9000001 a8c17bfd d65f03c0 d503201f 009f0020 ffffff80 00000000 00000055 [ 57.747871] 2038 00000000 00000000 00000000 00000000 00000000 00010074 009f0000 ffffff80 [ 57.756245] 2058 00000000 00000000 00000000 00020074 009f2000 ffffff80 00000000 00000000 [ 57.764619] 2078 00000000 00040074 009f0000 ffffff80 00000000 00000000 00000000 0006003f [ 57.772996] [ 57.772996] LR: 0xffffff80009f1f90: [ 57.777970] 1f90 ******** ******** ******** ******** ******** ******** ******** ******** [ 57.786354] 1fb0 ******** ******** ******** ******** ******** ******** ******** ******** [ 57.794735] 1fd0 ******** ******** ******** ******** ******** ******** ******** ******** [ 57.803117] 1ff0 ******** ******** ******** ******** a9bf7bfd 910003fd 58000100 95dde284 [ 57.811494] 2010 d2800000 52800021 b9000001 a8c17bfd d65f03c0 d503201f 009f0020 ffffff80 [ 57.819868] 2030 00000000 00000055 00000000 00000000 00000000 00000000 00000000 00010074 [ 57.828241] 2050 009f0000 ffffff80 00000000 00000000 00000000 00020074 009f2000 ffffff80 [ 57.836614] 2070 00000000 00000000 00000000 00040074 009f0000 ffffff80 00000000 00000000 [ 57.844990] [ 57.844990] SP: 0xffffffc07899bbe0: [ 57.849953] bbe0 08f46000 ffffff80 08f550a0 ffffff80 00000000 00000000 3e93ff00 ffffffc0 [ 57.858327] bc00 00000000 00000000 3e93ff48 ffffffc0 00000001 00000000 7899bc60 ffffffc0 [ 57.866700] bc20 009f2010 ffffff80 7899bc60 ffffffc0 009f2018 ffffff80 60400145 00000000 [ 57.875073] bc40 00000000 00000000 ffffffff ffffffff 00000000 00000080 80808080 00008080 [ 57.883446] bc60 7899bc70 ffffffc0 080831f0 ffffff80 7899bd00 ffffffc0 0816aeb4 ffffff80 [ 57.891818] bc80 009f0080 ffffff80 08f67000 ffffff80 00000001 00000000 4f8c7580 ffffffc0 [ 57.900191] bca0 08f67000 ffffff80 00000000 00000000 00000001 00000000 089fa000 ffffff80 [ 57.908564] bcc0 08f67000 ffffff80 00000000 00000000 3e93ff00 ffffffc0 00000000 00000000 [ 57.916944] [ 57.916944] X6: 0xffffff8009314aff: [ 57.921918] 4afc 6b6c6263 35317030 6e692022 34313d6f 6f637320 7865746e 3a753d74 75733a72 [ 57.930294] 4b1c 2030733a 6e6f6374 74786574 6f3a753d 63656a62 3a725f74 74737973 645f6d65 [ 57.938669] 4b3c 5f617461 656c6966 2030733a 616c6374 733d7373 65747379 6570206d 73696d72 [ 57.947045] 4b5c 65766973 5b0a313d 35202020 35352e37 33323535 6568205d 206f6c6c 6c726f77 [ 57.955420] 4b7c 5b0a2e64 35202020 35352e37 39343535 6e49205d 6e726574 65206c61 726f7272 [ 57.963795] 4b9c 6341203a 73736563 20676e69 72657375 61707320 6d206563 726f6d65 756f2079 [ 57.972170] 4bbc 64697374 61752065 73656363 20682e73 74756f72 73656e69 3639203a 30303030 [ 57.980545] 4bdc 5b203534 205d3123 45455250 2054504d 0a504d53 2020205b 352e3735 38323637 [ 57.988922] 4bfc 4d205d30 6c75646f 6c207365 656b6e69 6e692064 6568203a 286f6c6c 0a292b4f [ 58.285345] X20: 0xffffff8008f55020: [ 58.290396] 5020 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.298769] 5040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.307141] 5060 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.315514] 5080 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.323886] 50a0 08f550a0 ffffff80 08f550a0 ffffff80 00000001 00000000 00013880 00000000 [ 58.332260] 50c0 00000002 756e694c 00000078 00000000 00000000 00000000 00000000 00000000 [ 58.340632] 50e0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.349005] 5100 00000000 636f6c00 6f686c61 00007473 00000000 00000000 00000000 00000000 [ 58.357380] [ 58.357380] X21: 0xffffffc03fb28340: [ 58.362430] 8340 3fb2a0b0 ffffffc0 3f918d70 ffffffc0 3fb2a128 ffffffc0 3fb2a128 ffffffc0 [ 58.370804] 8360 00000001 00000000 00000000 00000000 4f88e8a0 ffffffc0 000ccafa 00000000 [ 58.379178] 8380 746f6e2e 6e672e65 75622e75 2d646c69 2f006469 6d687361 642f6d65 69766c61 [ 58.387552] 83a0 6e692d6b 65726964 72207463 74206665 656c6261 00000000 00000000 00000000 [ 58.395926] 83c0 00000000 00000000 5b207469 6c6c6568 00005d6f 00000000 00000000 00000000 [ 58.404299] 83e0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.412671] 8400 7a93ea00 ffffffc0 3fb7b400 ffffffc0 4a13c490 ffffffc0 4a13ce10 ffffffc0 [ 58.421045] 8420 3fb7b438 ffffffc0 3fb28460 ffffffc0 00000000 00000000 00000000 00000000 [ 58.429420] [ 58.429420] X22: 0xffffff8008f45f80: [ 58.434470] 5f80 00010001 00000000 00000000 00020002 00000000 00000000 00040004 00000000 [ 58.442843] 5fa0 00000000 00000000 00010001 00000000 00000000 00020002 00010001 00020002 [ 58.451215] 5fc0 00020002 00000000 00000000 00000000 00000000 00000000 00010001 00000000 [ 58.459588] 5fe0 00000000 00020002 00000000 00010001 00010001 00020002 00020002 00010001 [ 58.467961] 6000 00000000 00010001 00000000 00030003 00000000 00000000 00000000 00000000 [ 58.476335] 6020 00010001 00000000 00010001 00010001 00000000 00000000 00010001 00010001 [ 58.484707] 6040 00000000 00010001 00000000 00020002 00040004 00000000 00020002 00010001 [ 58.493081] 6060 00010001 00010001 00000000 00000000 00000000 00000000 00000000 00010001 [ 58.501456] [ 58.501456] X23: 0xffffff8008f55020: [ 58.506507] 5020 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.514880] 5040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.523252] 5060 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.531625] 5080 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.539998] 50a0 08f550a0 ffffff80 08f550a0 ffffff80 00000001 00000000 00013880 00000000 [ 58.548372] 50c0 00000002 756e694c 00000078 00000000 00000000 00000000 00000000 00000000 [ 58.556744] 50e0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 58.565117] 5100 00000000 636f6c00 6f686c61 00007473 00000000 00000000 00000000 00000000 [ 58.573492] [ 59.030807] Call trace: [ 59.033265] Exception stack(0xffffffc07899ba70 to 0xffffffc07899bba0) [ 59.039714] ba60: ffffff80009f2000 0000008000000000 [ 59.047551] ba80: 0000000001355000 ffffff80009f2018 0000000060400145 000000000000000c [ 59.055386] baa0: ffffff8009050000 000000000001c228 0000000000000006 0000000000000000 [ 59.063222] bac0: ffffff8008f63f40 0000000009050830 ffffffc07899bb70 ffffff80080f309c [ 59.071059] bae0: ffffff8008f46000 ffffff80080f3068 ffffffc03fb283c0 ffffff8008f46000 [ 59.078894] bb00: ffffff8008f550a0 0000000000000000 ffffffc03e93ff00 0000000000000000 [ 59.086730] bb20: ffffffc03e93ff48 cb88537fdc8ba653 0000000000000000 0000000000000001 [ 59.094566] bb40: cb88537fdc8ba653 0000000000000000 0000000000000000 0000000000000000 [ 59.102403] bb60: ffffff8009314b7f ffffff8008f8d320 ffffff80082fb318 7f7f7f7f7f7f7f7f [ 59.110239] bb80: fefefefefeff5c6e 7f7f7f7f7f7f7f7f 0101010101010101 0000000000000010 [ 59.118078] [<ffffff80009f2018>] hello_init+0x18/0x30 [hello] [ 59.123840] [<ffffff80080831f0>] do_one_initcall+0x178/0x194 [ 59.129507] [<ffffff800816aeb4>] do_init_module+0x5c/0x1b0 [ 59.135000] [<ffffff80081202d4>] load_module+0x1a30/0x1a84 [ 59.140491] [<ffffff8008120540>] SyS_finit_module+0x94/0xbc [ 59.146067] [<ffffff8008082930>] el0_svc_naked+0x24/0x28 [ 59.151389] Code: 58000100 95dde284 d2800000 52800021 (b9000001) [ 59.157795] ---[ end trace 25b8edcfdc04a2a4 ]---
3.objdump 反汇编分析
错误发生位置:
hello_init+0x10,即hello_init偏移0x10处PC is at hello_init+0x18/0x30 [hello] [ 57.605354] LR is at hello_init+0x10/0x30 [hello] [ 57.610068] pc : [<ffffff80009f2018>] lr : [<ffffff80009f2010>] pstate: 60400145
执行objdump反汇编
./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-androidkernel-objdump -d -M intel -S kernel/drivers/input/hello.ko > objdump.txt
汇编代码如下:
可看到hello_init+0x18处对应汇编指令为x0, 18 <cleanup_module+0x18>,即*p = 1;
通过objdump反汇编Oops可以轻松的知道错误原因及位置。Disassembly of section .exit.text: 0000000000000000 <cleanup_module>: MODULE_LICENSE("GPL"); MODULE_AUTHOR("baoli"); MODULE_DESCRIPTION("hello world module"); static int __init hello_init(void) { 0: a9bf7bfd stp x29, x30, [sp,#-16]! 4: 910003fd mov x29, sp int * p = 0; printk(KERN_WARNING "hello world.\n"); 8: 58000080 ldr x0, 18 <cleanup_module+0x18> c: 94000000 bl 0 <printk> *p = 1; 10: a8c17bfd ldp x29, x30, [sp],#16 14: d65f03c0 ret ...
4. objdump总结
1)objdump -d:反汇编目标文件中包含的可执行指令。
2)如果需要混合显示源码和汇编代码,需要加上-S选项,并且在编译目标文件时加上-g。
3)如果在编译目标文件时没有加-g选项,则-S相当于-d。
4)-S选项生成的混合代码,有时文件结构混乱,可读性较差。推荐使用-d选项,直接阅读汇编代码。
ELF文件包括:
(1)可重定位的目标文件
(2)可执行的目标文件
(3)可被共享的目标文件
可以用file命令来看目标文件是否是ELF文件
在linux下,用readelf来看ELF头部或者其它各section
的内容,用objdump
来对指定的内容(.text, .data等)进行反汇编。但是mac os X下没有这两个命令,可以用brew来安装,
brew update && brew install binutils
,然后用greadelf和gobjdump