proc_monitor: Support newer kernels am_proc_start format

This commit is contained in:
Jasmin Hassan 2017-03-25 11:21:48 +01:00 committed by topjohnwu
parent e87d989ca3
commit 91527500f9

View File

@ -1,7 +1,7 @@
#include "magiskhide.h"
void monitor_proc() {
int pid, badns, zygote_num = 0;
int pid, badns, i, zygote_num = 0;
char init_ns[32], zygote_ns[2][32];
// Get the mount namespace of init
@ -26,12 +26,30 @@ void monitor_proc() {
fprintf(logfile, "Zygote(%d) ns=%s ", i, zygote_ns[i]);
fprintf(logfile, "\n");
// get a sample line from am_proc_start
p = popen("logcat -b events -v raw -s am_proc_start -t 1", "r");
/**
* Format of am_proc_start is (as of Android 5.1 and 6.0)
* UserID, pid, unix uid, processName, hostingType, hostingName
* but sometimes can have 7 fields, with processName as 5th field
*/
fgets(buffer, sizeof(buffer), p);
int commas = 0;
char *s = buffer;
for (i = 0;s[i] != '\0';i++) {
if (s[i] == ',')
commas++;
}
int numFields = commas + 1;
pclose(p);
// Monitor am_proc_start
p = popen("logcat -b events -v raw -s am_proc_start", "r");
p = popen("logcat -b events -c; logcat -b events -v raw -s am_proc_start", "r");
while(!feof(p)) {
//Format of am_proc_start is (as of Android 5.1 and 6.0)
//UserID, pid, unix uid, processName, hostingType, hostingName
fgets(buffer, sizeof(buffer), p);
char *pos = buffer;
@ -43,7 +61,13 @@ void monitor_proc() {
}
char processName[256];
int ret = sscanf(buffer, "[%*d %d %*d %*d %256s", &pid, processName);
int ret;
if (numFields == 7) {
ret = sscanf(buffer, "[%*d %d %*d %*d %256s", &pid, processName);
} else {
ret = sscanf(buffer, "[%*d %d %*d %256s", &pid, processName);
}
if(ret != 2)
continue;