libdefault_proxy/jni/sysinfo.c

39 lines
991 B
C

#include <stdlib.h>
#include "sysinfo.h"
#include "hooks/inlineHook.h"
static void* LIB_DEFAULT_HANDLE = NULL;
void* get_func_addr(char* function_name) {
if(LIB_DEFAULT_HANDLE != NULL){
uintptr_t function_addr = (uintptr_t)dlsym(LIB_DEFAULT_HANDLE, function_name);
LOG("load function_addr %p", function_addr);
return function_addr;
}
}
void hook_func(void* func_ptr, void* patch_func, void* orig_func) {
LOG("registerInlineHook: %p", func_ptr);
int res = registerInlineHook((uintptr_t)func_ptr, (uintptr_t)patch_func, (uintptr_t**)orig_func);
if(res == 0){
LOG("success; res = 0x%x", res);
inlineHook(func_ptr);
}
else {
LOG("failed, res = 0x%x", res);
}
}
void hook_func_export(char* function_name, void* patch_func, void* orig_func) {
void* func_ptr = get_func_addr(function_name);
LOG("Hooking %s %p", function_name, func_ptr);
hook_func(func_ptr, patch_func, orig_func);
}
void set_lib_default_handle(void* handle) {
LIB_DEFAULT_HANDLE = handle;
}