我正在android应用程序中开发一些路由功能,需要访问ioctls。因为使用IOCTLS的应用程序需要root权限才能运行,所以我能够调用它们的唯一方法是将一个单独的可执行文件连接起来,并调用带有Java的CX>。
在android中,有没有一种方法可以从jni访问根权限,而无需构建单独的可执行文件?构建可执行文件是访问ioctl的最佳方法吗?
最佳答案
非根进程不可能成为根进程(除了利用漏洞之外),所以是的,您需要一个单独的进程。
这是从Linux继承来的,没有变化,区别在于没有直接的方法从启动程序以根用户的身份启动Android应用程序进程,因为这会将一个意图发送给合子,合子会分叉,并且特权会减少专门处理应用程序进程的子进程。(可能有一个迂回的方法来手动创建应用程序进程,但是您必须有一个应用程序进程来完成它,因此根据定义,它将是一个辅助进程。而且,如果应用程序不是合子的子代,它将无法继承系统库的共享映射,因此必须将自己的唯一副本加载到内存中,这将是低效的)
ioctl()只是另一个系统调用,仅当fd(从其设备文件)的访问权限允许时才需要根。很明显,你想用的就是这种情况,但其他的都是不可分割的。例如,大多数android框架ipc最终是用binder ioctl实现的,它们通常用于控制网络套接字。