我正在尝试实现一个内核模块,它可以访问用户进程的task_struct,我已经知道该进程的ID。我使用find_get_pid和pid_task来获取进程的task_struct:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/pid.h>
#include <linux/pid_namespace.h>
int init_module( void )
{
//Declaring the variables
int p_id = 6980; //6980 is the process ID of my user process
struct pid *pid_struct;
struct task_struct *task;
// Trying to access the variables of the p_id
pid_struct = find_get_pid(p_id);
task = pid_task(pid_struct, PIDTYPE_PID);
//Printing the info from the task_struct
printk( KERN_INFO "*** [%d]\n",task->pid);
return 0;
}
void cleanup_module( void )
{
return;
}它正在成功编译,我正在获取*.ko文件,但当我试图将它插入内核时,它给了我一个错误:
insmod: error inserting 'main.ko': -1 Unknown symbol in module
Dmesg给出了以下输出:
main: Unknown symbol find_get_pid (err 0)
我不知道该怎么做,如果有人能帮我,我将不胜感激。
发布于 2013-04-06 04:01:12
仔细检查你想要使用的函数是什么。
还要记住,很多“核心内核”(大概包括frob_task_by_pid_hard和类似的内核)都是GPL-only的,所以除非你声明你的模块的许可证是GPL,否则你哪儿也去不了。也请您填写模块上的其他样板数据: MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE。
发布于 2019-09-30 14:21:58
加载内核模块失败可能还有另一个原因,比如它显示错误为"insmod : error:.ko operation not permitted“。您的内核在最新的PC上使用安全引导选项启动,必须禁用该选项以避免加载/插入内核module.this失败。可以使用以下命令完成此操作。sudo apt install mokutil sudo mokutil -- disable -validation或者您可以搜索如何为您的特定操作系统禁用安全引导选项。
https://stackoverflow.com/questions/15837411
复制相似问题