編輯:關於android開發
所有Android應用進程都是zygote fork出來的,新fork出來的應用進程還保持著root權限,這顯然是不被允許的,所以這個fork出來的子進程的權限需要被降級,本文說的就是Android源碼在什麼地方執行了權限降級的操作。
如果不知道zygote是什麼,或者好奇zygote如何啟動,可以去看老羅的文章:
Android系統進程Zygote啟動過程的源代碼分析
下面的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將自身權限降級。
作者:尋禹@阿裡移動安全,更多安全技術博客,請點擊阿裡聚安全博客
用Kotlin開發Android應用(II):創建新項目,kotlinandroid這是關於Kotlin的第二篇。各位高手發現問題,請繼續“拍磚”
Android Develop:構建系統解析 Android構建系統是你用來構建、測試、運行和打包你的app的工具集。這個構建系統能作為Android Studio菜單
Android使用 selector 自定義控件背景 (以spinner 為例),androidspinner1. 在drawable中設置背景spinner_st
微信支付僅能成功調用一次的問題,微信支付調用本人使用Android開發有一段時間了,但是本身沒有系統學,而且多年專注服務端開發,總覺得因為項目需要接觸Android移動端