ubuntu18.04怎么hook内核函数
时间: 2023-10-31 16:34:11 浏览: 43
要hook内核函数,需要编写一个内核模块。以下是基本步骤:
1. 安装必要的软件包:`sudo apt-get install linux-headers-$(uname -r) build-essential`
2. 编写内核模块代码,其中包括要hook的函数的地址和新的函数实现。这个过程需要一定的内核编程知识和经验。
3. 编译内核模块代码:`make`
4. 加载内核模块:`sudo insmod 模块名.ko`
5. 在hook的函数被调用时,新的函数实现将被执行。
需要注意的是,hook内核函数可能会有一些风险,因此需要谨慎处理。同时,不同版本的内核可能会有一些差别,因此需要根据实际情况进行调整。
相关问题
ubuntu18.04怎么hook内核函数,不使用inlime hook方式
在 Ubuntu 18.04 中,可以使用内核模块来 hook 内核函数,不必使用 inline hook 方式。
以下是一个简单的例子,用于 hook 内核中的 sys_open 函数:
1. 创建一个 C 文件,例如 hook_sys_open.c,编写 hook 函数:
```
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/unistd.h>
// 原函数指针
asmlinkage long (*sys_open_orig)(const char *filename, int flags, umode_t mode);
// hook 函数
asmlinkage long hook_sys_open(const char *filename, int flags, umode_t mode)
{
printk(KERN_INFO "Hooked sys_open!\n");
return sys_open_orig(filename, flags, mode);
}
// 模块初始化函数
static int __init hook_sys_open_init(void)
{
// 获取原函数地址
sys_open_orig = sys_call_table[__NR_sys_open];
// 关闭写保护
write_cr0(read_cr0() & (~0x10000));
// 替换原函数地址
sys_call_table[__NR_sys_open] = hook_sys_open;
// 打开写保护
write_cr0(read_cr0() | 0x10000);
printk(KERN_INFO "Hook sys_open successfully!\n");
return 0;
}
// 模块卸载函数
static void __exit hook_sys_open_exit(void)
{
// 关闭写保护
write_cr0(read_cr0() & (~0x10000));
// 恢复原函数地址
sys_call_table[__NR_sys_open] = sys_open_orig;
// 打开写保护
write_cr0(read_cr0() | 0x10000);
printk(KERN_INFO "Unhook sys_open successfully!\n");
}
module_init(hook_sys_open_init);
module_exit(hook_sys_open_exit);
MODULE_LICENSE("GPL");
```
2. 编译模块:
```
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
```
3. 加载模块:
```
sudo insmod hook_sys_open.ko
```
4. 测试:
```
touch testfile.txt
```
在控制台中应该会输出 "Hooked sys_open!"。
5. 卸载模块:
```
sudo rmmod hook_sys_open
```
请注意,这只是一个简单的例子,实际 hook 内核函数需要更多的工作。在编写内核模块时,请确保您了解内核的工作原理,并小心使用。
ubuntu18.04 升级内核
升级Ubuntu 18.04系统的内核需要注意一些事项。首先,确保内核版本与NVIDIA驱动版本匹配,否则可能会导致驱动不兼容的问题。比如410版本的驱动无法在4.18以上的内核正常运行。 首先我系统初始为4.15版本内核的Ubuntu 18.04系统,这里我对内核做了一下升级。实际上不升级也完全没有问题,不影响后续操作。需要注意的地方在于内核版本与NVIDIA驱动版本应当匹配(比如410版本的驱动就无法在4.18以上的内核正常运行)。
原本使用Ubuntu 18.04.2 LTS来换到5.4.45的内核版本,来尝试在系统中直接用sudo apt-get install linux-image-…命令更新一下Linux的内核,但是碰到各种驱动不兼容的问题。网传的ubuntu更新内核的教程都有各种问题,例如我们这次会提到的,更新到4.17版本之后的内核,需要安装的软件包会多一个。这次自己来写一个教程记录一下。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Ubuntu 18.04 升级内核 配置GPU驱动+CUDA+CUDNN](https://blog.csdn.net/andyL_05/article/details/106974482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [Ubuntu 18.04 Linux内核升级(因为在系统中安装会出现各种驱动不兼容的问题,所以去官网下)](https://blog.csdn.net/qq_44930903/article/details/109183731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)