C insmod返回被杀死可能是因为任务结构
我访问当前进程的结构是为了在内核空间的Linux模块中获取当前进程的进程ID和命令名,但是当我使用C insmod返回被杀死可能是因为任务结构,c,linux,linux-kernel,C,Linux,Linux Kernel,我访问当前进程的结构是为了在内核空间的Linux模块中获取当前进程的进程ID和命令名,但是当我使用make构建模块并将其插入内核时,insmod返回Killed,然后我甚至无法从内核中删除我的模块 这里有什么问题吗? 如您所见,我还尝试将task\u struct用作全局,但得到了相同的结果 #include <linux/module.h> #include <linux/init.h> #include <linux/sched.h> // #includ
make
构建模块并将其插入内核时,insmod
返回Killed
,然后我甚至无法从内核中删除我的模块
这里有什么问题吗?
如您所见,我还尝试将task\u struct
用作全局,但得到了相同的结果
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
// #include <linux/moduleparam.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("whoami");
MODULE_DESCRIPTION("Simple LKM");
// char *to_say = "Nothing";
// struct task_struct *current_process;
// module_param(to_say, charp, S_IRUGO);
static int __init initialization_function(void)
{
struct task_struct *current_process;
printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);
return 0;
}
static void __exit cleanup_funcion(void)
{
printk(KERN_INFO "Module: Bye, World.");
}
module_init(initialization_function);
module_exit(cleanup_funcion);
我修复了错误,我只是用current
初始化了current\u进程
struct task_struct *current_process = current;
printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);
尝试在启用警告的情况下生成。在init例程中,使用符号当前_进程
,但未初始化;您想改为使用当前的<代码>吗?在insmod
之后,还要检查/var/log中的信息/messages@Milag我在某处听说,使用current
会破坏我的模块,但找不到源代码。而/var/log/syslog
是新发行版中/var/log/messages
的替代品。@Milag I修复了它(:当您可以直接使用current
时,为什么要声明附加变量(current\u process
):printk(KERN\u INFO”模块:pid-%d,命令名-%s\n',current->pid,current->comm)
?“我在某处听说使用current会破坏我的模块”-你可能是指你告诉过不要定义名为current
的变量。但是使用现有的current
类变量宏并没有错。@Tsyvarev谢谢,这很有效。我不知道我们能做到这一点
struct task_struct *current_process = current;
printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);