当前位置: 首页 > 工具软件 > oat++ > 使用案例 >

oat文件的 backtrace 定位

阴飞星
2023-12-01

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,去计算

 类似资料: