2016-06-23 2 views
0

Я написал приложение для Android, которое отслеживает системные вызовы запущенных процессов, но все, что я получаю, «Операция не разрешена ». Я попытался отключить SElinux и включить root-доступ на strace, используя «chmod 4777 strace» и chown «root: root strace», но я все еще не могу решить проблему. Приложение работает на эмуляторе 4.3 (API 18).«strace -p pid» дает «attach: ptrace (PTRACE_ATTACH, ...): операция не разрешена»

ответ

1

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

EPERM может быть запущен, если целевой процесс либо не может получать сигналы от strace (если работает как root, это исключено, хотя я не уверен, что strace на самом деле хорошо обрабатывает материал), целевой процесс сам по себе setuid (они отключить трассировку), а также если трассировка была просто отключена самим процессом. Кроме того, процесс может быть прослежен не более чем одним отладчиком.

Процессы, которые не поддаются давлению, не могут быть прикреплены strace. Процесс может быть настроен как неустойчивый, а также он происходит автоматически при изменениях UID (либо из-за бита setuid, либо из системного вызова setuid)

+0

Спасибо за ваше объяснение. Я заметил, что при запуске, например, файла «Strace cat» «-o/path» из приложения android вывод трассировки «cat» в «file» генерирует файл по указанному пути. Тем не менее, с помощью «Strace -p (процесс PID zygote) -f -o/path я получаю пустой файл, зная, что я попытался разблокировать случайные приложения в надежде получить системные вызовы из новых сгенерированных дочерних процессов, связанных с этими приложениями (Zygote - это родитель всех процессов приложения для Android). –

+0

Я также попытался связать дочерний процесс без отслеживания zygote, но впустую я испытал ту же проблему. Что вы предлагаете? Я где-то читал на форуме, чье имя не могу вспомнить, можно было бы изменить ядро, чтобы сделать трассировку. Currenlty Я работаю над API 15. –

+0

Для модификации ядра вам понадобится корневое устройство (я думаю, у вас оно есть). API - это то, что находится над ядром так что это действительно актуально. Замена ядра - это не то, что может сделать приложение. –

0

В некоторых случаях выполнение strace на Android не выполняется с помощью «ptrace (PTRACE_ATTACH, ...) : Операция не разрешена ", так как strace уже работает в Android

$ adb shell su -c ps | Grep Трассирование корень 15861 1 1056 4 do_wait 00000452cc S

После того, как старый запущенный процесс Трассирование убит, новые вызовы, возможно, удастся:

$ ADB оболочки су -c pkill Трассирование

Смежные вопросы