Как использовать strace в Android приложениях - PullRequest
0 голосов
/ 11 января 2020

Я хочу использовать strace для мониторинга системных вызовов моего приложения. Я запускаю свое приложение на эмуляторе Pixel 3 XL API29, и когда я использую оболочку adb на P C для выполнения команд «su» и «strace», все работает нормально. Но я хочу сделать работу монитора в приложении, чтобы я мог протестировать его на реальном устройстве, не подключаясь к adb на P C. Поэтому моя цель состоит в том, чтобы иметь два приложения, одно из которых является обычным приложением, а другое - приложением-монитором с использованием strace. Я новичок в Android и подумал о нескольких способах, но не знаю, могут ли они сработать, поэтому мне нужен совет. 1. Можно ли использовать команду 'su' и 'strace' на языке Java? Когда я использую Runtime.getRuntime (). Exe c (cmd), это не сработает. Код такой:

Process p=Runtime.getRuntime().exec("su");
DataOutputStream dos = new DataOutputStream(p.getOutputStream());
            dos.writeBytes("strace -f -tt -p pidnumber\n");
            dos.writeBytes("exit\n");
            dos.flush();
            dos.close();
            p.waitFor();

Обратите внимание, что когда я использую оболочку adb, я могу выполнить 'su 'напрямую. Я проверяю 'su' в / system / xbin, это '-rwsr-x ---', похоже, что другие не имеют разрешения на его выполнение. Поэтому я пытаюсь изменить его разрешение:

adb root 
adb remount
failed:/system/bin/remount exited with status 7
mount -o rw,remount /system
failed: mount: '/system' not in /proc/mounts

Я не знаю, что неверно или просто невозможно запустить 'su' в java.

Так как adb имеет возможность использовать strace, возможно ли извлечь эту возможность и добавить ее в мое приложение для монитора? Может быть, как построить библиотеку или просто дать разрешение указанному c приложению в оболочке adb?

На официальном сайте Android есть страница об использовании strace https://source.android.com/devices/tech/debug/strace, но она слишком грубая, и я не знаю, с чего начать. Похоже, мне нужно сначала скомпилировать модуль Strace

mmma -j6 external/strace

доза - это значит, что мне нужно скачать весь исходный код и выполнить команду, после чего я смогу использовать strace в Application?

Еще одно предположение: можно ли вызвать strace в C и использовать JNI в приложении для получения всех системных вызовов? Но я думаю, что, возможно, это столкнется с той же проблемой в методе 1, который не может запускать 'su'.

Ранее было несколько похожих вопросов, но они слишком старые и не помогают в моей ситуации.

Android приложение для strace

'strace' в android

Как использовать strace на Android?

У меня уже есть команда strace и мог бы использовать его в оболочке adb, похожий может быть и такой, но пока нет ответа.

Как вызвать нативную библиотеку Strace в Android приложении?

В общем, мой вопрос: возможно ли использовать strace в приложениях Andriod, и если да, то как я могу это сделать? Кроме того, любой совет относительно осуществимости вышеупомянутых четырех методов был бы полезен. Я с нетерпением жду любого метода, который может сработать, и заранее благодарен.

...