当只有uImage,而没有vmlinux,遇到问题时,可以通过这样的方法来查看反汇编。
1. 从uImage中提到压缩后的image
用UE打开uImage文件,找到1f 8b位置,如下,从0x58d4开始是gzip压缩的文件,使用dd将前面内容截掉。
000058c0h: 75 6E 63 6F 6D 70 72 65 73 73 69 6F 6E 20 65 72 ; uncompression er
000058d0h: 72 6F 72 00 1F 8B 08 00 00 00 00 00 02 03 E4 FD ; ror..?.......潺
000058e0h: 09 98 54 D5 B5 37 0E EF 53 43 77 75 77 D1 7D 7A ; .楾盏7.颯Cwuw複z
000058f0h: 40 5A 40 28 06 15 05 B5 18 54 62 50 0A 45 21 69 ; @Z@(...?TbP.E!i
2. 解压得到原始image
gzip -dc zimage > image
3. 反汇编
arm-linux-objcopy --change-addresses=0x80008000 -I binary -O elf32-littlearm -B arm image out
arm-linux-objdump -D out > dump.dis
4. 内核符号表
cat /proc/kallsyms可列出内核中所有的符号和对应的地址。
android下如果地址为0,需要输入:
echo 0 > /proc/sys/kernel/kptr_restrict