六. objdump + Systemp.map 反查源码
6.1 在System.map查找报错函数的逻辑地址
grep -rni "anon_vma_interval_tree_insert" System.map
返回:5685:ffffff80082016e4 T anon_vma_interval_tree_insert
6.2 objdump将vmlinux二进制文件转换成.txt文件
./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/aarch64-linux-android/bin/objdump -S -l vmlinux > vmlinux.txt
6.3计算PC逻辑地址=PC基地址 +偏移量
= 0xffffff80082016e4 + 0x40 = 0xFFFFFF8008201724
6.3 查看vmlinux.txt文件查找0xFFFFFF8008201724
6.4 定位到源码:
/home/android005/work/2_E7171/mt6765/kernel-4.9/mm/interval_tree.c :16
七.常用命令:
addr2line: 将系统崩溃地址对应到文件名和行号;
objdump:将so,bin等二进制文件反汇编成.txt;
vmlinux:内核镜像编译时生成;
System.map: 静态代码(kernel image)的符号表;
MTK6765平台文件路径:
out/target/product/k65v1_64_bsp/obj/KERNEL_OBJ/vmlinux
out/target/product/k65v1_64_bsp/obj/KERNEL_OBJ/System.map
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/aarch64-linux-android/bin/objdump