binwalk 提取bootimg_boot.img格式文件结构解析
本帖最后由 ironMan.K 于 2018-3-22 13:50 编辑
以msm8226为例,讲解android源码编译生成boot.img的结构。boot.img包括boot.img header、kernel以及ramdisk文件系统。下面是对boot.img的结构进行解读。
boot.img 文件头信息的具体结构可以在system/core/mkbootimg/bootimg.h中看到:
typedef struct boot_img_hdr boot_img_hdr;
#define BOOT_MAGIC "ANDROID!"
#define BOOT_MAGIC_SIZE 8
#define BOOT_NAME_SIZE 16
#define BOOT_ARGS_SIZE 512
struct boot_img_hdr{unsigned char magic[BOOT_MAGIC_SIZE];
unsigned kernel_size; /* size in bytes */unsigned kernel_addr; /* physical load addr */
unsigned ramdisk_size; /* size in bytes */unsigned ramdisk_addr; /* physical load addr */
unsigned second_size; /* size in bytes */unsigned second_addr; /* physical load addr */
unsigned tags_addr; /* physical addr for kernel tags */unsigned page_size; /* flash page size we assume */unsigned dt_size; /* device tree in bytes */unsigned unused; /* future expansion: should be 0 */unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */
unsigned char cmdline[BOOT_ARGS_SIZE];
unsigned id[8]; /* timestamp / checksum / sha1 / etc */};
boot,img文件跳过2k的文件头之后,包括两个 gz包,一个是boot.img-kernel.gz:Linux内核,一个是boot.img-ramdisk.cpio.gz
大概的组成结构如下:
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
** | device tree | p pages
** +-----------------+
** n = (kernel_size + page_size - 1) / page_size
** m = (ramdisk_size + page_size - 1) / page_size
** o = (second_size + page_size - 1) / page_size
** p = (dt_size + page_size - 1) / page_size
图一是boot.img头文件结构解析:
boot.img头文件结构解析
圈一:安卓的boot.img标准的文件头格式:ANDROID!(8字节)
圈二:kernel_size(4字节)
圈三:kernel_addr(4字节)
圈四:ramdisk_size(4字节)
圈五:ramdisk_addr(4字节)
圈六:second_stage_size(4字节)
圈七:second_stage_addr(4字节)
图八:tags_addr(4字节)
圈九:page_size(4字节)
boot.img头文件信息,kernel_addr,ramdisk_addr,second_stage_addr在bootable\bootloader\lk\target\msm8226\Rules.mk中设置:
PLATFORM := msm8226
MEMBASE:= 0x0FF00000 # SDRAM
MEMSIZE:= 0x00500000 # 5MB
BASE_ADDR := 0x00000
TAGS_ADDR:= BASE_ADDR+0x00000100
KERNEL_ADDR:= BASE_ADDR+0x00008000
RAMDISK_ADDR:= BASE_ADDR+0x01000000
SCRATCH_ADDR:= 0x10400000
page是页长,为1k(1024)的整数倍。此处为0x00000800,十进制为2048。
结合实际的boot.img文件,进行验证。如图二,是msm8226 boot.img
图二 msm8226 boot.img内容
解析msm8226 boot.img内容,可以得到:
base=0x00000000
kernel_size=0x005ff6f0
kernel_addr=0x00008000+base=0x00008000
ramdisk_size=0x00195de2
ramdisk_addr=0x01000000+base=0x01000000
sencond_stage_size=0x00000000
sencond_stage_addr=0x00f00000+base=0x00f00000tag_size=0x00000100
page_size=0x00000800(2KB)
binwalk 提取bootimg_boot.img格式文件结构解析相关推荐
- 深入boot.img格式文件结构解析
以msm8226为例,讲解android源码编译生成boot.img的结构.boot.img包括boot.img header.kernel以及ramdisk文件系统.下面是对boot.img的结构进 ...
- binwalk 提取bootimg_boot.img的解包与打包
Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式.这两者在Android下是直接合并在一起取名为boot.img,会放在一个独立分区当中.这个分区格式是 ...
- JVM探索之路之Class文件结构解析(一):Class文件的格式与定义
JVM 学习笔记目录: JVM探索之路之Class文件结构解析(二) :常量池 JVM探索之路之Class文件结构解析(三):访问修饰符.类索引.父类索引与接口索引集合 Class文件的格式与定义 C ...
- MP3文件结构解析(超详细)
1. MP3文件结构解析 1.1. 概述 1.1.1. 音频相关术语 ID3: 一般位于一个mp3文件的开头或末尾的若干字节内,记录该mp3文件的歌手.标题.专辑名称.年代.风格等信息,ID3分位两个 ...
- 直播2----FLV文件结构解析
FLV文件结构解析 FLV(FLASH VIDEO),是一种常用的文件封装格式,目前国内外大部分视频分享网站都是采用的这种格式.其标准定义为<Adobe Flash Video File For ...
- 一篇胎死腹中的Android文章——Dex文件结构解析
前言 国庆的时候,为了理解DexDiff算法,花了几天时间研究了下Dex的文件结构,算是有个整体的把握,这篇文章是在姜维的 <Android逆向之旅-解析编译之后的Dex文件格式>基础上, ...
- golang常用库之mapstructure包 | 多json格式情况解析、GO json 如何转化为 map 和 struct、Go语言结构体标签(Struct Tag)
文章目录 golang常用库之mitchellh/mapstructure包 | go将map转换为struct 一.msgpack 二.背景 三.多json格式情况解析使用思路 四.mapstruc ...
- sqlserver 扩展事件监控慢sql与阻塞sql,xml格式日志解析
零. 启用参数 SqlServer中默认blocked process收集是不开启的,可以通过以下sql查看,值为0表示未开启. exec sp_configure 'show advanced op ...
- 解析las文件_LAS格式的解析与转换
LAS 格式的解析与转换 孙爱怡,王健 [摘 要] 摘 要: 本文主要探讨 LAS 数据结构的发展历程 , 在分析已有四种版 本的基础上 , 探讨 LAS 标准发展趋势 , 并采用 C++ 语言对该格 ...
最新文章
- My deep learning reading list
- 为什么说21世纪是一场ABC的革命?
- BAT面试题9:谈谈判别式模型和生成式模型?
- 找区间连续值(HDU5247)
- 【存储知识学习】第三章磁盘原理与技术3.10 固态存储介质和固态硬盘-《大话存储》阅读笔记
- html首字母样式,html标签手册
- 笔记本高分屏字体模糊_笔记本win8系统设置1920*1080高分屏后字体模糊的解决方法...
- win7开启uasp协议_UASP与USB模式切换工具(SwitchUA官方版下载_UASP与USB模式切换工具(SwitchUASP) v1.0免费版 - Win7旗舰版...
- Docker最全教程——从理论到实战(二)
- c#官方推荐md5通用加密类
- [转]何时使用委托而不使用接口(C# 编程指南)
- 说说中国的图书出版业者-读《小学奥数举一反三(5年级A版)》和《2010注册建筑师建筑结构考试强化模拟试题集》有感...
- 11、doCreateBean中的initializeBean
- tar 打包、压缩和备份
- oracle脚本转mpp脚本,范本:使用expdp/impdp克隆生成一个新数据库
- table2excel 导出表格有边框,文字居中
- LED降压恒流驱动芯片适用于LED电动车/摩托/汽车大灯方案
- 【准备篇】1.Simulink-F28335自动代码生成开发环境搭建
- python是低级语言吗_低级语言和高级语言的区别
- java匹配任意,java有关正则表示式,我想匹配一个字串中的任意字元,怎么办?...