zoukankan      html  css  js  c++  java
  • coredump中提取oat文件的方法

    boot.oat是文件映射,所以coredump默认情况下是不会dump如boot.oat这种文件映射的。

    但我们可以通过设置/proc/{pid}/coredump_filter的值,也可以将boot.oat dump到core文件中。

    我们有了完整的内存镜像后,可以用gdb方便的访问文件镜像的内容了。

    并且我们也能从coredump中再把boot.oat给提取出来,再用oatdump等工具做分析。

    下面就写写如何从coredump中提取boot.oat的。

    首先,我们可以通过maps确定boot.oat的加载地址:

    32c01000-52c00000 ---p 00001000 00:04 11621      /dev/ashmem/dalvik-main space 1 (deleted)
    6f5ed000-700f5000 rw-p 00000000 b3:19 73733      /data/dalvik-cache/arm/system@framework@boot.art
    700f5000-72535000 r--p 00000000 b3:19 73732      /data/dalvik-cache/arm/system@framework@boot.oat
    72535000-72c7d000 r-xp 02440000 b3:19 73732      /data/dalvik-cache/arm/system@framework@boot.oat
    72c7d000-72c7f000 r-xp 02b88000 b3:19 73732      /data/dalvik-cache/arm/system@framework@boot.oat
    72c7f000-72cf9000 r-xp 02b8a000 b3:19 73732      /data/dalvik-cache/arm/system@framework@boot.oat
    ...
    73eab000-7401c000 r-xp 03db6000 b3:19 73732      /data/dalvik-cache/arm/system@framework@boot.oat
    7401c000-7401d000 rw-p 03f27000 b3:19 73732      /data/dalvik-cache/arm/system@framework@boot.oat
    7401d000-7416b000 rw-p 00000000 00:04 11619      /dev/ashmem/dalvik-zygote space (deleted)

    它的起始地址是0x700f5000,结束地址是0x7401d000,大小是0x7401d000-0x700f5000=0x3f28000

    gdb的dump memory命令:

    (gdb) dump memory boot.oat 0x700f5000 0x7401d000

    这个命令在工作目录下生成boot.oat文件,我们可以用oatdump工具解析这个文件。

    $ out/host/linux-x86/bin/oatdump  --oat-file=boot.oat --output=boot.oat.txt
  • 相关阅读:
    关于ios7的适配问题
    iOS安全攻防(十八):数据保护API
    【Objective-C】OC中KVO的基本概念和使用方法
    pytest运行方式
    unittest中使用ddt做数据驱动
    unittest使用HtmlTestRunner显示报告
    unittest中的断言内容
    unittest指定跳过某些方法
    unittest运行时指定运行顺序
    xpath使用属性元素定位,包含 and 、or、not
  • 原文地址:https://www.cnblogs.com/YYPapa/p/6851259.html
Copyright © 2011-2022 走看看