從Android boot.img與recovery.img的解包中瞭解其數據
又到了忙碌的季節,一次要處理N多事情。最近需要從boot.img中取出ramdisk。不同的項目中kernel是一樣的,ramdisk中的資源不一樣,直接取ramdisk與新編譯的kernel打包在一起,方便又快捷。下面就看看boot.img的結構。
在網上搜索了一遍,找到幾個文章,說得都挺明白的了。boot.img由四部分組成:1 page的header,n page的kernel,m page的ramdisk,o page的second stage。幾個部分是緊密接合在一起的,大小不夠一個page的填充0補齊。還有完整的perl腳本來解包,真的是一應俱全。知其然還要知其所以然,下來就看看其數據究竟是怎麼分佈的,也當是留給自己的備註信息。
先是 1 page的頭部信息:
page的單位是多少?一般文章都只說了是2K的文件頭。這個是標準如此定死了還是有跡可尋呢?先別管這塊,取2K的數據看一下吧。分析腳本所得,具體數據偏移如下:(這部分的信息是定義在android-src/system/core/mkbootimg/bootimg.h中,也可以從此文件獲得。)
1)偏移0x00,8 byte,總是"ANDROID!",相當於magic number吧。
2)偏移0x08,8 byte,前4byte是kernel的大小,後4byte是kernel載入內存的地址。
3)偏移0x10,8 byte,結構同kernel,前4byte是ramdisk的大小,後4byte是載入地址。
4)偏移0x18,8 byte,結構同上,前4byte是second stage的大小,後4byte是載入地址。這部分一般都沒有,大小是0。
5)偏移0x24,4 byte,頁(page)大小,一般是0x800,也就是2K。
6)偏移0x30,16 byte,boot name,貌似沒怎麼用上。
7)偏移0x40,512 byte,cmdline內核參數,這個不多說了,懂什麼是內核的都明白吧。
後續的kernel和ramdisk,都可以根據文件頭中的信息算出地址和大小,直接分解出來即可。注意填充的0要去掉,可能對第二次打包產生影響。
從Android boot.img與recovery.img的解包中瞭解其數據組成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Android開發之ButterKnife,GreenDao簡單運用,以及推薦並使用一個好用的開源庫BaseRecyclerViewAdapterHelper。
不要说话丶
2018-08-27 20:04:11
nexus 5X update 8.0
杨飞扬
2018-08-27 20:04:03
Retrofit2 使用心得
杨飞扬
2018-08-27 20:03:51
Android studio Errors
杨飞扬
2018-08-27 20:03:48
Summary of problems when coding
杨飞扬
2018-08-27 20:03:48
Android Studio 配置Android Annotation
杨飞扬
2018-08-27 20:03:48
Android內存管理機制
叫我流氓
2018-08-27 20:03:47
2018 Android面試心得,已拿到offer
huison_ma
2018-08-27 20:03:45
Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
叫我流氓
2018-08-27 20:03:44
Android滑動衝突解決方式(下拉刷新上拉加載更多,適配RecyclerView/ListView/ScrollView)
huison_ma
2018-08-27 20:03:44
Activity生命週期基礎
叫我流氓
2018-08-27 20:03:44
短信監聽---數據庫變動
叫我流氓
2018-08-27 20:03:44
Android應用程序框架四大重要的組件
叫我流氓
2018-08-27 20:03:44
Android studio 打包jar包
叫我流氓
2018-08-27 20:03:44
SQLite---T_double
叫我流氓
2018-08-27 20:03:43