在内核中,如果要hook某个函数,有三种方法,
1. 修改syscall table
2.替换对象指针
3. inline hook 只要把函数开头的5个字节替换成call/jmp指令.
前两种比较简单,这里记录下inline hook的实现过程.
步骤
1. 保存orig 函数的前5个字节指令.
2.定义一个stub函数,用于跳转回orig函数.
3.在新函数中,调用stub函数.

具体实现
#include<linux/module.h>
#include<linux/printk.h>
#include<linux/kobject.h>
#include<linux/kernel.h>
#include<asm/unistd_64.h>
#include<linux/syscalls.h>
#include<linux/delay.h>
#include<linux/kallsyms.h>
#include<asm/syscall.h>
#include<asm/paravirt.h>
#include <asm/nops.h>
#include <linux/net.h>
#include <linux/in.h>
#include <net/tcp.h>
#include <net/udp.h>
#include <linux/init.h>
#include <asm/insn.h>
typedef void *(*text_poke_t)(void *addr, const void *o
内核函数Hook技术详解

本文深入探讨了在内核中Hook函数的三种方法:修改syscalltable、替换对象指针和inline hook。重点介绍了inline hook的实现过程,包括保存原始函数指令、定义跳转回原始函数的stub函数,并详细展示了如何在新函数中调用stub函数,以及具体的代码实现。
最低0.47元/天 解锁文章
1083





