日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android的各种*.img 文件

發布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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類型。
    • 用表格表示如下
      文件類型文件
      datakernel-qemu
      local.img

      userdata-qemu.img
      gzipramdisk.img
      VMS Alpha executablesystem.img
      userdata.img(images目錄)
      opl.img

      userdata.img(avd目錄)
      cache.img
  • 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版本的。。。

  • 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 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。