使用LD_PRELOAD 加系统调用 替换libc原有函数

来源:互联网 发布:希尔伯特变换 c语言 编辑:程序博客网 时间:2024/06/05 10:14

环境变量 LD_PRELOAD 路径下的 so 会优先加载

这里以替换mmap 函数作为示例 

#include <unistd.h>#include <sys/syscall.h> #include <stdio.h>#define gettidv1() syscall(__NR_gettid) //#define __NR_mmap2(__NR_SYSCALL_BASE+192)//arm-linux-gnueabihf/libc/usr/include/asm/unistd.h//log_find_file_by_prefix: open directory fail! void *mmap(void *addr, size_t length, int prot, int flags,                  int fd, off_t offset){   printf ("call in %d,%d,%d\n",length,getpid(),gettidv1());      return (void *)syscall(__NR_mmap2,addr,length,prot,flags,fd,offset);}void *mmap2(void *addr, size_t length, int prot,                    int flags, int fd, off_t pgoffset){   printf ("call in 2\n");   return (void *)syscall(__NR_mmap2,addr,length,prot,flags,fd,pgoffset);}int munmap(void *addr, size_t length){  printf ("unmap %d,%d,%d\n",length,getpid(),gettidv1());  return syscall(__NR_munmap,addr,length);}

编译成so 文件 ,放入环境变量

程序再运行就执行的是 我们自己写的mmap





原创粉丝点击