2024年最全Linux 内核模块API之__module_address_linux内核增加api(2)

前言

主要介绍内核模块API__module_address的使用以及源码解析,以及其它一些类似的模块函数。

该函数用来判断一个地址是否属于内核模块中的地址,在安全领域中该函数可以用来检测一些内核关键函数是否被hook。

通常在内核rootkit 中,比较常见的hook:hook系统调用,hook /proc 接口,hook 中断向量表等等,如果系统调用表中的地址,proc接口和中断向量表中的某个地址没有在内核地址中,而是在内核模块地址中,那么该地址就很有可能被攻击了,内核rootkit都是通过内核模块的方式来加载。因为,系统调用表中的地址,proc接口和中断向量表中都是在内核地址中。

因此我们可以用该API来进行rootkit检测,来判断一个内核关键点是否被hook。

一、__module_address源码详解

1.1 struct module

struct module是内核模块在内核中最重要的一个结构体,每一个内核模块都有一个该结构体,用来描述该内核模块的基本信息。

struct module
{
	enum module\_state state;

	/\* Member of list of modules \*/
	struct list\_head list;

	/\* Unique handle for this module \*/
	char name[MODULE_NAME_LEN];

	......

		/\* Startup function. \*/
	int (\*init)(void);

	/\* If this is non-NULL, vfree after init() returns \*/
	void \*module_init;

	/\* Here is the actual code + data, vfree'd on unload. \*/
	void \*module_core;

	/\* Here are the sizes of the init and core sections \*/
	unsigned int init_size, core_size;

	/\* The size of the executable code in each section. \*/
	unsigned int init_text_size, core_text_size;

	/\* Size 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值