Android 層級分析
這個圖中 kernel 和 native 層的通信是 syscall,這個大家都很熟悉,就是系統調用,畢竟 C++ 調用 C 語言還是很簡單的。
而 FrameWork 層和 Native 層通信就比較復雜了,java 如何調用 C++ 語言,這里會有一個 JNI 機制,JNI 有特定的語法,類似于 C 語言但又不是 C 語言,他可以實現 java 調用 C++的函數,這個過程需要 Android Runtime(ART) 安卓虛擬機的配合。
在 Native 層中,有很多 C++ 寫的系統服務,供上層使用,比如最重要的ServiceManager,管理所有其他服務的服務。
案例分析
手機 app 想要控制喇叭、LED 等硬件,要從 app 傳遞到 kernel,操作硬件,這個流程要比 Linux 的應用程序復雜得多。并且方式不止一種,舉例:
1、app 通過直接讀寫 kernel 節點,向其寫入數據,這就類似于在 Linux 命令行直接 echo,這是最簡單的方式。因為 java 本身也有文件讀寫函數,有按字節讀寫和字符串讀寫兩種方式。
2、app 的 java 語言調用 JNI 文件,JNI 調用 C 語言,在 C 函數中去操作節點。
3、也可以用 C++ 寫一個 Native 服務,APP 通過 binder 通信訪問這個服務,在這個服務中操作節點。當然 socket 通信也可以。
Android 權限問題
當然,以上所有的操作都需要權限,安卓系統的權限限制的比較嚴格,防止黑客破解。
如果你有 root 權限,那么你可以在安卓系統命令行中輸入 setenforce 0 來關閉Android 系統的 SELinux 檢查機制,那基本上你所有操作都可以被允許。
在 Linux 系統中,安全機制是:我是 root,我派出去的程序訪問任何東西也應該是 root 權限,沒有人可以阻止我。
在 Andorid 系統中,安全機制是:不管你是誰,做任何事情都要提前申請,否則會被 SELinux 檢查,沒有提前申請的行為都會被拒絕,看 log 會發現很多 avc deny。
舉個形象一點的例子:一個公司老板,派他的兒子去自己的公司上班,按理來說是應該類似于 root 權限,誰能擋我?實際上呢,到公司上班可以,因為老板提前說了,但是去衛生間要申請權限,用電腦要申請權限,用打印機要申請權限,除了過來上班,其余任何沒有提前說明的行為都會被拒絕。
這就是 Andorid 系統嚴格的安全機制,防止了黑客破解 root 權限以后亂搞你的手機,比如:內置一個程序,定期訪問你的 xxx 文件,然后通過網絡發出去。
-
Android
+關注
關注
12文章
3945瀏覽量
127934 -
Linux
+關注
關注
87文章
11345瀏覽量
210396 -
函數
+關注
關注
3文章
4346瀏覽量
62973 -
系統
+關注
關注
1文章
1019瀏覽量
21429
發布評論請先 登錄
相關推薦
評論