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

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

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

#include 
#include  
#include 

#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





你可能感兴趣的:(使用LD_PRELOAD 加系统调用 替换libc原有函数)