Android5.1.1原始碼-zygotefork出的子程式如何許可權降級
前言
如果不知道zygote是什麼,或者好奇zygote如何啟動,可以去看老羅的文章:
Android系統程式Zygote啟動過程的原始碼分析
所有Android應用程式都是zygote fork出來的,新fork出來的應用程式還保持著root許可權,這顯然是不被允許的,所以這個fork出來的子程式的許可權需要被降級,本文說的就是Android原始碼在什麼地方執行了許可權降級的操作。
執行路徑
下面的runSelectLoop方法是類ZygoteInit的成員方法,它在檔案”frameworks/base/core/java/com/android/internal/os/ZygoteInit.java”中,下面是它的原始碼:
zygote會在這個方法中等待客戶端通知啟動一個新的應用程式,詳情可以看前言部分列出的文章。現在我們關心的是done = peers.get(index).runOnce();語句,這個語句呼叫了runOnce方法啟動了一個新的應用程式,runOnce方法是ZygoteConnection類的成員方法,下文從runOnce方法開始分析。
ZygoteConnection.runOnce方法在檔案”frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java”中,下面是它的原始碼:
parsedArgs中儲存了要啟動的應用的資訊,它的型別是Arguments,Arguments是ZygoteConnection的內部類。
runOnce方法中呼叫了Zygote.forkAndSpecialize方法,這個方法在檔案”frameworks/base/core/java/com/android/internal/os/Zygote.java”中,下面是它的原始碼:
在這個方法中呼叫了nativeForkAndSpecialize方法。
nativeForkAndSpecialize是一個native方法,在native程式碼中它的函式名是com_android_internal_os_Zygote_nativeForkAndSpecialize,這個函式在檔案”frameworks/base/core/jni/com_android_internal_os_Zygote.cpp”中,下面是它的原始碼:
在這個函式中呼叫了ForkAndSpecializeCommon函式。
子程式許可權降級函式
ForkAndSpecializeCommon函式在檔案”frameworks/base/core/jni/com_android_internal_os_Zygote.cpp”中,在這個函式中呼叫了fork函式,並且fork出的子程式將自身許可權降級,下面是它的原始碼:
在這個函式中子程式分別呼叫了SetGids、SetRLimits、setresgid、setresuid,設定了組ID和使用者ID將自身許可權降級。
相關文章
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- .NET 程式許可權控制、獲得管理員許可權程式碼
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- 【Git】程式碼許可權&分支管理Git
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- PostgreSQL物件許可權如何在後設資料中獲取-許可權解讀、定製化匯出許可權SQL物件
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- Linux提權-許可權升級Linux
- oracle列級許可權控制Oracle
- 關於公司程式碼許可權的問題
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- Joomla1.6的許可權層級OOM
- 修改組策略以安裝MSI程式進行許可權升級或許可權維持
- 動態許可權的使用以及RxPermissions原始碼分析原始碼
- 如何設定許可權?
- 程式碼批量新增ACL管理員許可權
- AIX 的許可許可權(轉)AI
- Django-Rest-Framework 許可權管理原始碼淺析DjangoRESTFramework原始碼
- drf 許可權校驗設定與原始碼分析原始碼
- 短視訊系統原始碼,讓程式獲得通知欄許可權原始碼
- 利用子域的System許可權通往父域
- 許可權之選單許可權
- FreeBSD程式的許可權(轉)
- 取消 root 級管理員的 root 許可權
- 簡單幾行程式碼申請許可權行程
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- django許可權之二級選單Django
- 如何檢測應用通知許可權?如何跳轉通知許可權設定頁?
- Spring安全的角色和許可權原始碼與教程 - javadevjournalSpring原始碼Javadev
- [轉]delphi 有授權許可的字串拷貝函式原始碼字串函式原始碼
- SAP PLM文件許可權物件的控制級別物件
- 許可權系統:一文搞懂功能許可權、資料許可權
- 原始碼即是許可證原始碼
- 如何在Oracle VM下更改root許可權密碼Oracle密碼
- Linux-許可權管理(ACL許可權)Linux
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- 無程式碼實現CRM角色許可權問題