iOS可執行檔格式初探

來源:互聯網
上載者:User

標籤:blog   http   io   ar   os   for   java   on   檔案   

Mach-O (Mach object) file format?

這種格式的中文資料很少,最詳細的還是蘋果的官方文檔,本文不重複解釋mach-o檔案格式的內容,只敘述在用ida逆向ios應用程式時的經驗。

mach-o詳細文檔參考:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html

?mach-o格式可以包含多個目標平台的可執行代碼,比如同時包含arm64與arm7的可執行代碼。

?

實驗1:我們首先產生一個包含2中平台的app,通過對比對同一個app 載入不同的架構代碼進行對比分析。

當用多目標平台產生一個ios應用程式後,將其拖入到ida中,如所示:

?

?

?ida識別到兩種架構的代碼。

先讓ida載入arm7平台的代碼

?

?

?在右面的十六進位視窗可以看到mach-o檔案的魔數。在左下角的位置顯示魔數在檔案位移4000的位置,可以知道可執行檔從位移4000的位置開始將檔案對應到記憶體(從0開始)。

然後開啟段視窗查看檔案對應到記憶體的布局

 

從ida段視窗可以清楚的看到各個可執行檔各個節的載入情況。

然後我們關閉ida,重新選擇arm64載入可執行檔。

載入後我們可以知道 arm64架構的代碼從檔案位移14000開始的位置映射到記憶體。

(兩種架構的段,可以發現有一些不一樣的地方,就是arm64架構多了一個got節。這個節的作用待補充。)

好了,我們現在知道檔案位移4000-14000的位置屬於 arm7架構部分,14000-end 屬於arm64架構部分,那麼0-4000位置存放的是什麼內容呢?

用16進位編輯器開啟檔案:

CAFEBABE?是不是很熟悉?是java的魔數,至於0-4000的內容到底是什麼,帶著疑問繼續學校mach-o檔案。

實驗2:產生一個單一平台的應用,查看其檔案組織形式。

步驟如實驗1所示,將產生的app拖到ida。

?

?

?由此我們可以得出一個結論,就是單平台的ios 應用檔案 沒有實驗1中檔案的0-4000資料。

iOS可執行檔格式初探

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.