非ルート プロセスが (エクスプロイトを超えて) ルートになる手段はないため、別のプロセスが必要です。
これは変更されずに Linux から継承されます。違いは、Android アプリケーション プロセスをランチャーからルートとして起動する直接的な方法がないことです。これは、アプリケーション プロセスに特化した子をフォークして権限を削減するインテントを zygote に送信するためです。(アプリケーション プロセスを手動で作成するための回り道があるかもしれませんが、それを行うにはアプリケーション プロセスが必要になるため、定義上、それは 2 次プロセスになります。 zygote の子は、システム ライブラリの共有マッピングを継承しないため、独自の一意のコピーをメモリにロードする必要があります)
ioctl() は単なる別の syscall であり、(デバイス ファイルから) その fd へのアクセス許可が必要な場合にのみ root が必要です。明らかにそれはあなたが使いたいものに当てはまりますが、他の人は特権を与えられていません. たとえば、Android フレームワークの IPC の大部分は最終的に Binder ioctl で実装され、ネットワーク ソケットを制御するために一般的に使用されます。