用于在目标程序的 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); } |
编译
gcc -o libfakemain.so -fPIC -shared fakemain.c -ldl |
测试
LD_PRELOAD=./libfakemain.so ls |
Hello! fakemain.c hotkey hotkey.vala libfakemain.so |
Over!