oat文件的 backtrace 定位

backtrace 为:

    #00 pc 00000000026c0024 /data/dalvik-cache/arm64/system@framework@boot.oat (offset 0x26c0000)
    #01 pc 00000000026e9d38  /data/dalvik-cache/arm64/system@framework@boot.oat (offset 0x26c0000)

当时oat 的map 为:

70cfb000-733bb000 r--p 00000000 fd:00 2909220                            /data/dalvik-cache/arm64/system@framework@boot.oat
733bb000-75d9f000 r-xp 026c0000 fd:00 2909220                            /data/dalvik-cache/arm64/system@framework@boot.oat
75d9f000-75da0000 rw-p 050a4000 fd:00 2909220                            /data/dalvik-cache/arm64/system@framework@boot.oat
7f9d97e000-7f9d97f000 r--p 00000000 fd:00 2909220                        /data/dalvik-cache/arm64/system@framework@boot.oat

 04-25 16:20:10.868 10263 10263 W art     : Failed to open oat file '/data/dalvik-cache/arm64/system@framework@boot.oat' referenced from image /data/dalvik-cache/arm64/system@framework@boot.art: Failed to ma
 p ELF file segment 2 from /data/dalvik-cache/arm64/system@framework@boot.oat: mmap(0x733bb000, 43925504, 0x5, 0x12, 13, 40632320) of file '/data/dalvik-cache/arm64/system@framework@boot.oat' failed: Permiss
 ion denied. See process maps in the log. 

boot.oat 可执行代码的加载地址为:733bb000

相对于当时出问题的oat 文件,代码段的偏移地址为:0x26c0000

相对于当时出问题的oat 文件, 发生问题的代码在oat 中的偏移地址为:00000000026e9d38


编译或从对应手机中pull 出一个boot.oat 文件反编译:

此boot.oat文件,代码段的偏移地址为:

在boot.oat 的反编译文件中搜索:EXECUTABLE OFFSET 对应的地址 (0x026bf000)


正常与异常时 代码段的地址相见:

0x26c0000 - 0x026bf000 =  0x00001000

那么可知 发生异常时oat的代码段要比当前这个整体大 0x00001000

那么:

0x026c0024 -  0x00001000

0x026e9d38 -  0x00001000

即为backtrace,中地址转换到当前 oat 中的地址

如果 backtrace 给的是绝对地址,还需要减去733bb000,去计算

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值