[DESCRIPTION]在KE、HWT的DB中。需要使用gdb和addr2line来协助debug。但在Android O版本之后,gdb解析不出栈帧,addr2line找不到对应地址行号的问题,本FAQ提供解决此类问题的方法。[SOLUTION]1、为什么地址无法解析? 因为KASLR(KernelAddressSpaceLayoutRandomization)。在Android O版本后,KASLR被强制打开,用来加强系统安全性问题。 KASLR简单描述就是在每次开机都会给kernel生成一个offset,所有VA都是经过offset计算的。而我们的符号表vmlinux 是没有经过offset计算,所以地址配置不上。2、Offset 如何获取。 有两个途径: 2.1从解析的DB中,打开SYS_REBOOT_REASON文件,Kernel Offset的值即是。 2
Gdb和addr2line解析地址(栈帧)不匹配的处理办法
[DESCRIPTION]在KE、HWT的DB中。需要使用gdb和addr2line来协助debug。但在Android O版本之后,gdb解析不出栈帧,addr2line找不到对应地址行号的问题,本FAQ提供解决此类问题的方法。[SOLUTION]1、为什么地址无法解析? 因为KASLR(KernelAddressSpaceLayoutRandomization)。在Android O版本后,KASLR被强制打开,用来加强系统安全性问题。 KASLR简单描述就是在每次开机都会给kernel生成一个offset,所有VA都是经过offset计算的。而我们的符号表vmlinux 是没有经过offset计算,所以地址配置不上。2、Offset 如何获取。 有两个途径: 2.1从解析的DB中,打开SYS_REBOOT_REASON文件,Kernel Offset的值即是。 2