hook的LD_PRELOAD用法

来源:互联网 发布:霍华德生涯得分数据 编辑:程序博客网 时间:2024/06/05 19:19
LD_PRELOAD,是个环境变量,用于动态库的加载,动态库加载的优先级最高,一般情况加载顺序———>          LD_PRELOAD——>            LD_LIBRARY_PATH——>              /etc/ld.so.cache——>                /usr/lib———>以time为例,如果我们有个自定义的time函数,把它编译成so后,通过LD_PRELOAD加载,当程序中调用time函数时,调用的是我们自定义的函数.1.time_test.c#include <stdio.h> long time(void*unused) {  printf("\nHook is Success!!!\n”);  return 7777; }编译:gcc -shared -fpic -o libtime_test.so time_test.c2.main_test.c#include <stdio.h>#include <time.h>int main(){  long timeval =time(NULL);  printf("timeval = %ld\n", timeval);  return 0;}<1>执行本地main_test # gcc -o main_test main_test.c # ./main_test timval = 3231223<2>使用执行LD_PRELOAD配置so加载环境: # LD_PRELOAD=./libtime_test.so ./main_test Hook is Success!!!