39 lines
991 B
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;
|
|
} |