Linux C: hook read和write函数

文章目录

  • 一、什么是Hook
  • 二、如何实现
  • 三、结果

一、什么是Hook

通过拦截软件模块间的函数调用、消息传递、事件传递来修改或扩展操作系统、应用程序或其他软件组件的行为的各种技术。处理被拦截的函数调用、事件、消息的代码,被称为hook

二、如何实现

主要有 定义类型、初始化、实现原始接口三个部分

  1. 定义类型
typedef ssize_t (*read_t)(int fd, char* buf, size_t count);
typedef ssize_t (*write_t)(int fd, const char* buf, size_t count);

read_t read_func = NULL;
write_t write_func = NULL;
  1. 初始化
void init_hook(){
    if(!read_func){
        read_func = (read_t)dlsym(RTLD_NEXT, "read");
    }
    if(!write_func){
        write_func = (write_t)dlsym(RTLD_NEXT, "write");
    }
}
  1. 实现原始接口
ssize_t read(int fd, char* buf, size_t count){
    printf("扩展read\n");

    ssize_t ret = read_func(fd, buf, count);
    return ret;
}

ssize_t write(int fd, const char* buf, size_t count){
    printf("扩展write\n");
    
    ssize_t ret = write_func(fd, buf, count);
    return ret;
}
  1. 调用例子
int main(){
    init_hook();
    
    int fd = open("text.txt", O_RDWR);

    char buffer[128] = {0};
    read(fd, buffer, 128);
    printf("%s\n", buffer);

    const char* text = "context after modified";
    write(fd, text, strlen(text));

    read(fd, buffer, 128);
    printf("%s\n", buffer);

    close(fd);
}

三、结果

Linux C: hook read和write函数_第1张图片

你可能感兴趣的:(linux,c语言,开发语言,运维,c++)