我在编译和安装内核模块时遇到问题,内核模块用于查找计算机的sys_call_table,并更改一些值。
但是,当我尝试编译它时,我收到以下消息:
WARNING: "set_memory_rw" [/home/steelslayer/Synergy/synergy-networking/
hook/hook.ko] undefined!
似乎很奇怪,因为我set_memory_rw
中找到了/asm/cacheflush.h
。
无论如何,如果我尝试忽略并安装模块,我会收到以下错误消息:
ERROR: could not insert module hook.ko: Unknown symbol in module
从上一个错误中可以预料到
dmesg的:
hook: Unknown symbol set_memory_rw (err 0)
生成文件:
CONFIG_MODULE_SIG=n
CONFIG_MODULE_SIG_ALL=n
obj-m += hook.o
all:
make -C /lib/modules/\`uname -r\`/build M=$(PWD) modules
clean:
make -C /lib/modules/\`uname -r\`/build M=$(PWD) clean
包括并定义:
#include <linux/module.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/types.h>
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
#include <linux/syscalls.h>
#include <linux/delay.h> // loops_per_jiffy
#define CR0_WP 0x00010000 // Write Protect Bit (CR0:16)
/* Just so we do not taint the kernel */
MODULE_LICENSE("GPL");
相关代码:
ret = set_memory_rw(PAGE_ALIGN(addr) - PAGE_SIZE, 3);
我真的不知道为什么会这样,希望得到你的帮助。