bytedance / bhook

:fire: ByteHook is an Android PLT hook library which supports armeabi-v7a, arm64-v8a, x86 and x86_64.
https://github.com/bytedance/bhook/tree/main/doc#readme
MIT License
2.05k stars 315 forks source link

hook 构造函数崩溃问题 #66

Closed pengood closed 1 year ago

pengood commented 1 year ago

bytehook Version

1.0.6

Android OS Version

10.0

Android ABIs

armeabi-v7a

Device Manufacturers and Models

pixel 1

Describe the Bug

希望hook Android libbase.so android::base::LogMessage::LogMessage构造函数,hook代码如下: `namespace android { namespace base {

    enum LogSeverity {
        VERBOSE,
        DEBUG,
        INFO,
        WARNING,
        ERROR,
        FATAL_WITHOUT_ABORT,
        FATAL,
    };

    enum LogId {
        DEFAULT,
        MAIN,
        SYSTEM,
    };

    void LogMessage(const char *file, unsigned int line, LogId id, LogSeverity severity,
                    const char *tag, int error) {
        BYTEHOOK_STACK_SCOPE();
        ALOGD("LogMessage %s",file);
        BYTEHOOK_CALL_PREV(LogMessage, file, line, id, severity, tag, error);
    }

    void HookCallback(bytehook_stub_t task_stub, int status,
                      const char *caller_path_name, const char *sym_name,
                      void *new_func, void *prev_func, void *hooked_arg) {
        ALOGE("hook: %s-%s-%d", caller_path_name, sym_name, status);
    }

    void hook(){
        bytehook_hook_single("libart.so", "libbase.so",
                "_ZN7android4base10LogMessageC2EPKcjNS0_5LogIdENS0_11LogSeverityES3_i",
                             reinterpret_cast<void *>(LogMessage), HookCallback, NULL);
   }
}

}`

然后时间运行时在BYTEHOOK_CALL_PREV调用原函数时会崩溃,崩溃栈如下:

image

大佬帮忙看下是怎么回事啊

caikelun commented 1 year ago

改成这样试试:

void* LogMessage(void *thiz, void *const char *file, unsigned int line, int id, int severity, const char *tag, int error) {
    BYTEHOOK_STACK_SCOPE();
    ALOGD("LogMessage %s",file);
    return BYTEHOOK_CALL_PREV(LogMessage, thiz, file, line, id, severity, tag, error);
}
pengood commented 1 year ago

可以了,感谢感谢