我想弄清楚我給出的一些代碼。有人能告訴我這是什麼意思嗎?su是什麼意思:process = Runtime.getRuntime()。exec(「su」);
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
尤其是su。
謝謝!
我想弄清楚我給出的一些代碼。有人能告訴我這是什麼意思嗎?su是什麼意思:process = Runtime.getRuntime()。exec(「su」);
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
尤其是su。
謝謝!
在沒有任何其他類型的參數的情況下,su將用戶標識更改爲0(超級用戶),但不更改當前路徑或環境。
這是一個Unix命令。它用於切換活動用戶。有關命令的詳細信息,請參見例如this manual page。 Wikipedia page對命令名稱的含義有一些討論。我認爲這是「切換用戶」,但並不那麼簡單。
好的,但爲什麼有人想在這種情況下切換活動用戶? – user758362 2011-05-23 17:28:00
做一些他們當前的用戶是不允許的。具體來說,這段代碼很可能以root身份啓動shell進程(隱含),並設置一個流來發送它的命令,以便讓它執行父進程無權執行的操作。請注意,這是**不支持**在官方版本的Android。 – 2011-05-23 17:32:48
所以,如果我想創建一個輸入流,否則在另一個線程中(所以我不殺死應用程序時,輸入阻塞)我應該複製這種模式或有更好的方式來做到這一點? – user758362 2011-05-23 17:35:49
經常被忽視的是,但最重要的是,su不會更改現有進程的用戶標識,而是會啓動一個作爲所請求的用戶標識運行的新進程(可能是一個shell)。 – 2011-05-23 17:35:13
正確!要更改當前進程的執行ID,程序應嘗試調用setuid(uid)uid_t uid; su命令默認啓動一個新的shell,你可以提供一個命令在新shell中執行。 – saint 2011-05-23 17:40:07
是的,但請注意,setuid()不能讓先前未授權的進程變成root,這是許多嘗試以編程方式嘗試使用'su'(特別是在android上)尋找並找不到的功能。 – 2011-05-23 17:49:01