Make xhook log as Magisk

This commit is contained in:
topjohnwu 2021-08-21 00:58:51 -07:00
parent 5754782a4e
commit bade4f2c6a
5 changed files with 19 additions and 16 deletions

View File

@ -8,7 +8,6 @@ extern int DAEMON_STATE;
void unlock_blocks();
void reboot();
void magisk_logging();
void start_log_daemon();
void setup_logfile(bool reset);

View File

@ -149,6 +149,20 @@ static int magisk_log(int prio, const char *fmt, va_list ap) {
return len;
}
// Used to override external C library logging
extern "C" int magisk_log_print(int prio, const char *tag, const char *fmt, ...) {
char buf[4096];
auto len = strlcpy(buf, tag, sizeof(buf));
// Prevent format specifications in the tag
std::replace(buf, buf + len, '%', '_');
snprintf(buf + len, sizeof(buf) - len, ": %s", fmt);
va_list argv;
va_start(argv, fmt);
int ret = magisk_log(prio, buf, argv);
va_end(argv);
return ret;
}
#define mlog(prio) [](auto fmt, auto ap){ return magisk_log(ANDROID_LOG_##prio, fmt, ap); }
void magisk_logging() {
log_cb.d = mlog(DEBUG);
@ -158,16 +172,6 @@ void magisk_logging() {
log_cb.ex = nop_ex;
}
#define alog(prio) [](auto fmt, auto ap){ \
return __android_log_vprint(ANDROID_LOG_##prio, "Magisk", fmt, ap); }
void android_logging() {
log_cb.d = alog(DEBUG);
log_cb.i = alog(INFO);
log_cb.w = alog(WARN);
log_cb.e = alog(ERROR);
log_cb.ex = nop_ex;
}
void start_log_daemon() {
int fds[2];
if (pipe2(fds, O_CLOEXEC) == 0) {

View File

@ -365,7 +365,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE:= libxhook
LOCAL_C_INCLUDES := $(LOCAL_PATH)/xhook/libxhook/jni
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
LOCAL_CFLAGS := -Wall -Wextra -Werror -fvisibility=hidden
LOCAL_CFLAGS := -Wall -Wextra -Werror -fvisibility=hidden -D__android_log_print=magisk_log_print
LOCAL_CONLYFLAGS := -std=c11
LOCAL_SRC_FILES := \
xhook/libxhook/jni/xh_log.c \

View File

@ -48,7 +48,7 @@ enum : int {
int connect_daemon(bool create = false);
void android_logging();
void magisk_logging();
// Daemon handlers
void post_fs_data(int client);

View File

@ -81,7 +81,7 @@ static void inject_cleanup_wait() {
__attribute__((constructor))
static void inject_init() {
if (char *env = getenv(INJECT_ENV_2)) {
android_logging();
magisk_logging();
LOGD("zygisk: inject 2nd stage\n");
active_threads = 1;
unsetenv(INJECT_ENV_2);
@ -100,7 +100,7 @@ static void inject_init() {
active_threads++;
new_daemon_thread(&unload_first_stage, env);
} else if (getenv(INJECT_ENV_1)) {
android_logging();
magisk_logging();
LOGD("zygisk: inject 1st stage\n");
char *ld = getenv("LD_PRELOAD");
@ -128,7 +128,7 @@ static void inject_init() {
// Start code for magiskd IPC
int app_process_main(int argc, char *argv[]) {
android_logging();
magisk_logging();
if (int fd = connect_daemon(); fd >= 0) {
write_int(fd, ZYGISK_REQUEST);