diff options
-rw-r--r-- | lib/hook-functions.c | 3 | ||||
-rw-r--r-- | lib/substitute.h | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/hook-functions.c b/lib/hook-functions.c index d7b925f..4fc61e0 100644 --- a/lib/hook-functions.c +++ b/lib/hook-functions.c @@ -182,7 +182,8 @@ int substitute_hook_functions(const struct substitute_function_hook *hooks, #endif hi->code = code; hi->arch_dis_ctx = arch; - uintptr_t pc_patch_start = (uintptr_t) code; + uintptr_t pc_patch_start = hook->func_addr ? + hook->func_addr : (uintptr_t) code; int patch_size; bool need_intro_trampoline; if ((ret = check_intro_trampoline(&trampoline_ptr, &trampoline_addr, diff --git a/lib/substitute.h b/lib/substitute.h index d3af586..9a8d9ba 100644 --- a/lib/substitute.h +++ b/lib/substitute.h @@ -98,6 +98,8 @@ struct substitute_function_hook { /* Currently unused; pass 0. (Protip: When using C {} struct initializer * syntax, you can just omit this.) */ int options; + /* If not zero, then assume the actual address of function is func_addr */ + uintptr_t func_addr; }; /* substitute_hook_functions options */ |