android的各种*.img 文件
关于android的各种disk images
对android的各种disk images很好奇,一直想知道怎么去know和hack这些images,所以就有了这篇paper。
- 用file来查看文件类型
- chenjian@ubuntu8:/tmp/images$ file *
kernel-qemu: data
local.img: data
ramdisk.img: gzip compressed data, from Unix, last modified: Thu Oct 22 16:30:38 2009
system.img: VMS Alpha executable
userdata.img: VMS Alpha executable
opl.img: VMS Alpha executable - 可见有三种,data, gzip和VMS Alpha executable;
- 再看从avd目录取得的image文件
- chenjian@ubuntu8:/tmp/images/HVGA.avd$ file *
cache.img: VMS Alpha executable
userdata.img: VMS Alpha executable
userdata-qemu.img: data - 仍然没有逃脱以上三种image类型。
- 用表格表示如下
文件类型 文件 data kernel-qemu
local.img
userdata-qemu.imggzip ramdisk.img VMS Alpha executable system.img
userdata.img(images目录)
opl.img
userdata.img(avd目录)
cache.img
- chenjian@ubuntu8:/tmp/images$ file *
- ramdisk.img
- 可以使用这个命令来查看ramdisk.img
- root@ubuntu8:/tmp/images# gzip -d -S .img ramdisk.img
root@ubuntu8:/tmp/images# ls -lrt ramdisk
-rw-r--r-- 1 root root 260608 Oct 22 01:34 ramdisk - 可见ramdisk.img被解压成ramdisk,
- root@ubuntu8:/tmp/images# file ramdisk
ramdisk: ASCII cpio archive (SVR4 with no CRC) - 可见ramdisk是个cpio文件,需要用cpio来extract
- root@ubuntu8:/tmp/images# mkdir ramdiskdir 创建ramdiskdir来装ramdisk的内容
root@ubuntu8:/tmp/images# cd ramdiskdir/ cd到该目录中
root@ubuntu8:/tmp/images/ramdiskdir# cpio -idmv <../ramdisk 使用cpio来extractramdisk文件
data
default.prop
dev
init
init.goldfish.rc
init.rc
proc
sbin
sbin/adbd
sys
system
509 blocks
root@ubuntu8:/tmp/images/ramdiskdir# ls 这就是被打包在ramdisk中的文件
data default.prop dev init init.goldfish.rc init.rc proc sbin sys system - 使用find和file来看这些文件,发现init其实是个ARM arch的可执行文件,这也和emulator中所说的linux是ARM arch相吻合
root@ubuntu8:/tmp/images/ramdiskdir# find . -type f|file -f -
./default.prop: ASCII text
./init.rc: ASCII English text
./init.goldfish.rc: ASCII English text
./init: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
./sbin/adbd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped - 查看某些文件的md5
root@ubuntu8:/tmp/images/ramdir# find . -name "init*"|xargs md5sum
c3cff931e494bb4872f0ebefe1dad548 ./init.rc
90dd60a3458cce84901d12b362880339 ./init.goldfish.rc
7a950533c62fe91300a5b31b12a38084 ./init - ls –lrt 这些文件
root@ubuntu8:/tmp/images/ramdir# find . |grep init|xargs ls -lrt
-rwxr-x--- 1 root root 11875 Jan 1 1970 ./init.rc
-rwxr-x--- 1 root root 2138 Jan 1 1970 ./init.goldfish.rc
-rwxr-x--- 1 root root 127548 Jan 1 1970 ./init
- data
data文件共有这么几个,kernel-qemu,local.img和userdata-qemu.img。
什么是data文件?如何使用这些文件?我们面临着么两个问题 - VMS Alpha executable
VMS Alpah executable共有这么几个system.img,userdata.img,opl.img,userdata.img和cache.img。
什么是VMS Alpha executable?如何使用这些文件?我们面临这么两个问题。。。 - adb shell(1.5版本)
使用这个命令据说可以在emulator起来以后进入到android os的shell中,我们来看看、- D:\Program Files\OPhoneSDK_1.5.beta\tools>adb shell
# pwd
pwd
/ - # ls -l
ls -l
lrwxrwxrwx root root 2010-01-31 15:03 preload -> /system/preload
drwxr-xr-x root root 2010-01-31 15:03 Linux
lrwxrwxrwx root root 2010-01-31 15:03 bin -> /opl/telephony/bin
lrwxrwxrwx root root 2010-01-31 15:03 usr -> /opl/telephony/usr
lrwxrwxrwx root root 2010-01-31 15:03 lib -> /opl/telephony/lib
drwxrwxrwt root root 2010-01-31 15:05 tmp
drwxrwxrwt root root 2010-01-31 15:05 sqlite_stmt_journals
drwxrwx--- system cache 2009-12-20 10:11 cache
drwxr-xr-x system system 2009-10-10 13:11 opl
drwxrwxrwx system system 2009-10-24 01:48 local
d--------- system system 2010-01-31 15:03 sdcard
drwxr-xr-x root root 2010-01-31 15:03 d
lrwxrwxrwx root root 2010-01-31 15:03 etc -> /system/etc
drwxr-xr-x root root 2009-10-22 16:20 system
drwxr-xr-x root root 1970-01-01 08:00 sys
drwxr-x--- root root 1970-01-01 08:00 sbin
dr-xr-xr-x root root 1970-01-01 08:00 proc
-rwxr-x--- root root 11875 1970-01-01 08:00 init.rc
-rwxr-x--- root root 2138 1970-01-01 08:00 init.goldfish.rc
-rwxr-x--- root root 127548 1970-01-01 08:00 init
-rw-r--r-- root root 118 1970-01-01 08:00 default.prop
drwxrwx--x system system 2009-12-20 10:11 data
drwx------ root root 1970-01-01 08:00 root
drwxr-xr-x root root 2010-01-31 15:04 dev - 果然,可以run一些linux下的基本命令,如ls,pwd等,证明了我们确实是获得了一个linux shell
- 另外黄颜色显示的文件和我们在ramdisk中看到的文件似乎大小一致,暗示它们是同一。
- run mount to see有那些文件系统被mount了
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
tmpfs /tmp tmpfs rw 0 0
/dev/block/mtdblock0 /system yaffs2 rw 0 0
/dev/block/mtdblock4 /opl yaffs2 rw 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock3 /local yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0 - 我们看见了system,opl,data,local和cache;恩,这些名字和那个表格里的data/VMS Alpha Executable似乎有些重合
/system,/opl和/cache是VMS Alpha Executable的system.img,opl.img和cache.img转换而来
/local是data的local.img转换而来
/data嘛,就不太好判断,不知道和userdata.img和userdata-qemu.img有什么关系没?
但至少我们知道可以查看/system来明白system image包含哪些东西了吧。。。,比如/system/framework就是android的framework啦
也可以知道可以查看/cache来明白什么是cache image的内涵了吧。。。
对于local image同理可得。。。 - 另外,adb shell提供的command有限,比如没有zcat,cp,uname和busybox等,有没有办法能将这些命令加入进去呢?
到这里下载busybox,http://benno.id.au/blog/2007/11/14/android-busybox,然后按照提示将busybox push至/data/busybox目录,install后即可运行所有的busybox applet。比如:# /data/busybox/zcat /proc/config.gz|/data/busybox/more
/data/busybox/zcat /proc/config.gz|/data/busybox/more
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.25
# Mon Nov 10 05:02:15 2008
所以我们就能知道1.5的Android用的linux kernel是2.6.25版本的。。。
- D:\Program Files\OPhoneSDK_1.5.beta\tools>adb shell
- kernel在哪里?
- 什么是yaffs2? http://en.wikipedia.org/wiki/YAFFS2
ok,这又是一种新的文件系统,designed specially for NANDchips;YAFFS2是YAFFS的第二版,为了适应新的NAND chips,这些新chip的pagesize有2048bytes,plus 64bytes的spare areas;老版本的NANDchips的page是512bytes,plus 16bytes spare area。 - 这些disk images从何而来?
从这篇文章编译Android1.5里能否得到一些启示?
在编译android1.5后,其实我们能得到3个img文件,似乎可以下断言,这三个image是在编译android的过程中得到的。有关生成他们的过程又是另外一个话题,估计得去读makefile了。root@ubuntu8:/ophone/android-1.5# find . -name *.img
./out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
./out/target/product/generic/userdata.img
./out/target/product/generic/system.img
./out/target/product/generic/ramdisk.img
BTW, out目录是在编译过程中产生的目录,其余目录则是source目录
android的各种*.img 文件相关推荐
- Android 使用git 忽略文件
git 使用的是.ignore 忽略文件的 下面是github上面的android 使用的忽略文件修改了部分 可以直接复制到项目中使用 ,如果有特殊的添加即可 # Built application ...
- android 创建隐藏文件夹吗,Android创建隐藏文件可能文件夹
Android创建隐藏文件或者文件夹 android创建隐藏文件或者文件夹,其实只要在文件名或者文件夹名字前加一个点号即可. 隐藏文件(夹)可直接进行读写. 如果需要去除隐藏,那就是重命名,去除点即可 ...
- Android如何使用so文件和Android studio中导入so
Android中使用so文件: 做一个PDF阅读的功能,找到一个开源的库,mupdf.下载的是网上编译好的so库,导入到自己项目中的时候一直报错Java.lang.UnsatisfiedLinkErr ...
- android 内部存储 清空,Android清空应用内部文件缓存
Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用 ...
- Android代码实现APK文件的安装与卸载
Android代码实现APK文件的安装与卸载 Android程序使用代码的安装和卸载!!! 安装: String str = "/CanavaCancel.apk"; String ...
- android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...
本文实例讲述了Android读取本地json文件的方法.分享给大家供大家参考,具体如下: 1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson ...
- ReactNative生成android平台的bundle文件命令
ReactNative生成android平台的bundle文件命令 2016年11月03日 23:23:28 阅读数:4869 注:如果assets文件没有正确生成,需要手机创建或授权 网上的其它的很 ...
- [Android]生成heap dump文件(.hprof)
Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于A ...
- android启动---lk入口文件crt0.s解析
android启动---lk入口文件crt0.s解析 // .section 伪操作, 用户可以通过.section 伪操作来自定义一个段,每一个段以段名为开始, //以下一个段名或者文件结尾为结束, ...
- Android 笔记之 R 文件
Android笔记之R文件 阅读目录 介绍 R 文件的内容 介绍 通过 R 文件引用资源 一.R 文件的内容 在 Android Studio 中 R 文件位于 app -> build -&g ...
最新文章
- 2020腾讯广告算法大赛分享(冠军)
- 将文件转成byte[]文件属组
- apache tomcat部署web应用的三种实现方式
- python合并列表重新排序_python – 将两个已排序的列表合并为一个更大的排序列表...
- mybatis注解动态sql_超全MyBatis动态SQL详解
- 背包问题九讲_背包问题
- linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法
- MySQL数据库安装Version5.7.25
- dd大牛《背包九讲》(转载)
- 【nosql】NoSql是什么?
- 20200209:匹配子序列的单词数(leetcode792)
- java如何调用linux命令_java程序中如何调用linux命令
- JAVA:hotspot 虚拟机的server和client模式
- 批量插入数据 C# SqlBulkCopy使用
- java cookie实例_java 中cookie的详解及简单实例
- 帆软之FineReport填报报表
- 苹果cms如何添加广告代码
- python滑稽代码
- 【实战】SpringBoot整合多数据源
- ROS新手问题 [rospack] Error: package '***' not found
热门文章
- 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性
- CodeSmith输错license后的解决办法
- UA SIE545 优化理论基础 用Farkas定理证明Farkas类的结论
- Windows驱动开发-_驱动对象学习和内核处理字符串初步
- codesmith学习总结
- 【旧文章搬运】Win7可变对象头结构之InfoMask解析
- 让mysql支持emoji表情
- Protobuf在Unity中的通讯使用
- 软件工程结对开发团队成员以及题目介绍
- 2017寒假练习题解 第四周 2.6-2.12