天天看點

【Android 逆向】ART 脫殼 ( dex2oat 脫殼 | aosp 中搜尋 dex2oat 源碼 | dex2oat.cc#main 主函數源碼 )

文章目錄

  • 前言
  • 一、搜尋 dex2oat 源碼
  • 二、dex2oat.cc#main 主函數源碼

前言

在 【Android 逆向】ART 脫殼 ( DexClassLoader 脫殼 | exec_utils.cc 中執行 Dex 編譯為 Oat 檔案的 Exec 和 ExecAndReturnC函數 ) 部落格中 , 将 dex 檔案編譯為 oat 檔案 , 編譯過程是由 dex2oat 可執行程式完成的 , 這是一個有 main 函數的可執行程式 ;

一、搜尋 dex2oat 源碼

進入源碼搜尋頁面 http://aospxref.com/android-8.0.0_r36/ ,

" Project " 中 選中所有的子產品 , 在 " Full Search " 中 , 搜尋 " dex2oat " , 即可搜尋出相關的源碼 ;

​AOSP 搜尋方法 :​ 此處可以搜尋可以選擇 聲明 Definition , 變量或字元串 Symbol , 檔案路徑 File Path , 曆史 History , 類型 Type 等搜尋類型 , 選擇 " Full Search " 可以以所有搜尋類型為依據 ;

此處搜尋出的 dex2oat 源碼路徑是 /art/dex2oat/dex2oat.cc ;

【Android 逆向】ART 脫殼 ( dex2oat 脫殼 | aosp 中搜尋 dex2oat 源碼 | dex2oat.cc#main 主函數源碼 )

二、dex2oat.cc#main 主函數源碼

dex2oat.cc#main 主函數中 , 調用了 art::Dex2oat 方法 , 執行 oat 檔案編譯操作 ;

​dex2oat.cc#main 主函數源碼 :​

int main(int argc, char** argv) {
  int result = static_cast<int>(art::Dex2oat(argc, argv));

  // 一切都已完成,請在此處顯式退出,以避免運作占用時間的運作時析構函數
  // 時間(bug 10645725),除非我們是調試版本或在valgrind上運作。注:Dex2Oat類
  // 在這種情況下,不應破壞運作時。
  if (!art::kIsDebugBuild && (RUNNING_ON_MEMORY_TOOL == 0)) {
    _exit(result);
  }
  return result;
}