用于在目标程序的 main 函数执行前完成一些操作 特定情况下用来调试还是不错的。
源代码
* fakemain.c * Heiher <admin@heiher.info> */ #include <stdio.h> #define __USE_GNU #include <dlfcn.h> static void do_something(void) { printf("Hello!\n"); } int __libc_start_main(int (*main)(int, char **, char **), int argc, char **ubp_av, void (*init)(void), void (*fini)(void), void (*rtld_fini)(void), void (*stack_end)) { int (*__libc_start_main_real)(int (*main) (int, char **, char **), int argc, char **ubp_av, void (*init)(void), void (*fini)(void), void (*rtld_fini)(void), void (*stack_end)); do_something(); __libc_start_main_real = dlsym(RTLD_NEXT, "__libc_start_main"); return __libc_start_main_real(main, argc, ubp_av, init, fini, rtld_fini, stack_end); }
编译
测试
Over!