Как обеспечивается разрешение Android?

Если я вызову функцию socket() в методах JNI C, приложение будет по-прежнему терпеть неудачу с ошибкой разрешения. И если я поместил строку разрешения использования в AndroidManifest.xml, проблема будет исправлена.

Итак, похоже, что проверка доступа к Android не реализована в виртуальной машине Dalvik, так как я вызываю собственную функцию C и все еще проверяется. Я хотел бы знать, как выполняется проверка в ядре Android, или приложение прослеживается с чем-то вроде ptrace для перехвата каждого системного вызова или любым другим способом. Большое спасибо.

Ответы

Ответ 1

Проверки выполняются ядром Linux, используя членство в группе для определения прав доступа.

Если вы посмотрите в код виготы вигота в VM, вы можете увидеть его с помощью setgroups(), чтобы установить идентификаторы дополнительных групп. Если вы немного преследуете его в коде приложения, вы можете увидеть, где он определяет разрешения и передает их в forkAndSpecialize().

Ответ 2

Исходный код работает в той же песочнице, что и приложения SDK, и поэтому они подвержены той же модели безопасности, что и приложения SDK.

Смотрите Загрузите Android NDK:

Если вы пишете собственный код, приложения все еще упакованы в файл .apk, и они все еще запускаются внутри виртуальной машины на устройстве. Основное приложение для Android модель не изменяется.