zoukankan      html  css  js  c++  java
  • Qcom ramdump解析方法简介-- ramdump parser

    首先得先抓取ramdump, 如何抓取qcom ramdump这里不再赘述。

    进入本文正题:

    拿到ramdump后,

    首先需要拿到相应的符号文件, 如vmlinux放到ramdump的文件夹。

    然后从source code中拿到解析ramdump的几个gnu工具,

    aarch64-linux-android-gdb,aarch64-linux-android-nm,aarch64-linux-android-objdump

    aarch64-linux-android-gdb不知在哪个版本开始android 源码中已不再提供了,所以需要自己从网上下载。

    然后下载ramdump parser,  高通给文档里面写的是

    git clone git://codeaurora.org/quic/la/platform/vendor/qcom-opensource/tools

    但是下的版本往往过时的,所以建议使用source code里面的ramdump parser工具

    路径如下:

    vendor/qcom/opensource/tools/

    工具准备好之后需要在ramdump parser 目录下新建一个local_settings.py,内容示例如下:

    gdb_path = "gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-gdb"
    nm_path = "gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-nm"
    objdump_path = "gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-objdump"
    gdb64_path = "gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb"
    nm64_path = "gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-nm"
    objdump64_path = "gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objdump"

    再编写一个sh脚本用于执行解析:

    # ramdump-parser.sh
    #! /bin/bash
    echo ""
    echo "Start ramdump parser.."
    local_path=$PWD
    ramdump=$local_path/
    vmlinux=$local_path/vmlinux
    out=$local_path/out
    gdb=~/Ramdump_tools/tools/gnu-tools/aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb
    nm=~/Ramdump_tools/tools/gnu-tools/aarch64-linux-android-4.9/bin/aarch64-linux-android-nm
    objdump=~/Ramdump_tools/tools/gnu-tools/aarch64-linux-android-4.9/bin/objdump
    # git clone git://codeaurora.org/quic/la/platform/vendor/qcom-opensource/tools
    ramparse_dir=~/Ramdump_tools/tools/ramdump/tools/linux-ramdump-parser-v2
     
    echo "cd $ramparse_dir"
    cd $ramparse_dir
    echo ""
    echo -e "python ramparse.py -v $vmlinux -g $gdb -n $nm  -j $objdump --force-hardware 630 --phys-offset=0x40000000 -a $ramdump -o $out -x"
    echo ""

    # python 2.7.5
    python ramparse.py -v $vmlinux -g $gdb -n $nm  -j $objdump --force-hardware 630 --phys-offset=0x40000000 -a $ramdump -o $out -x
    cd $local_path
    echo "out: $out"
    echo ""
    exit 0
     
     
     
    错误提示:
    1:
    !!! A bogus hardware id was specified: 630
    !!! Supported ids:
    9615
    8625
    8626
    8627
    9635
    8260
    8909
    8908
    californium
    8916
    8960
    8929
    8610
    9607
    8064
    8060
    8630
    8026
    9640
    9625
    8084
    8952
    8953
    8992
    8996
    8994
    8936
    8937
    8930
    8917
    8974
    8939
    8976

    ——版本老了,建议使用source code里的工具。

     2:

    TZ address: 146bf658
    Adding /media/rainey/Ramdump/PQCS#433/Device#144/1226/ocean_a1_ramdump/DDRCS0_0.BIN 40000000--9fffffff
    Adding /media/rainey/Ramdump/PQCS#433/Device#144/1226/ocean_a1_ramdump/DDRCS1_0.BIN a0000000--ffffffff
    Adding /media/rainey/Ramdump/PQCS#433/Device#144/1226/ocean_a1_ramdump/OCIMEM.BIN 14680000--146bffff
    Adding /media/rainey/Ramdump/PQCS#433/Device#144/1226/ocean_a1_ramdump/PIMEM.BIN 1c000000--1c1fffff
    The kaslr_offset extracted is: 0x55c600000
    The kimage_voffset extracted is: ffffff84e4600000
    Using 64bit MMU
    !!! Could not match version!
    !!! Could not get the Linux version!
    !!! Your vmlinux is probably wrong for these dumps
    !!! Exiting now

    ——需要你指定--phys-offset, 如--phys-offset=0x40000000

  • 相关阅读:
    Redis之使用python脚本监控队列长度
    ELK之filebate收集日志传递至Logstash
    [转] SOLID五大设计原则
    [转] 面向对象原则之GOF是招式,九大原则才是精髓
    [转] (CQRS)命令和查询责任分离架构模式(一) 之 什么是CQRS
    [0] 四色原型
    [0] C#软件项目版本号的命名规则及格式介绍
    [0] AssemblyInfo.cs文件介绍
    [0] 服务器 TCP 提供程序无法在 [ 'any' <ipv4> *] 上侦听。TCP 端口已在使用中。
    [0] C#异常种类
  • 原文地址:https://www.cnblogs.com/rainey-forrest/p/12162216.html
Copyright © 2011-2022 走看看