Как обеспечивается разрешение Android? - PullRequest
16 голосов
/ 01 марта 2011

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

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

Ответы [ 2 ]

19 голосов
/ 01 марта 2011

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

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

5 голосов
/ 01 марта 2011

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

См. Загрузка Android NDK :

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

...