如何从LKM获取Linux内核的数据段 [英] How to get data segment of Linux kernel from LKM
本文介绍了如何从LKM获取Linux内核的数据段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在编写一个涉及tasklist_lock
,__bss_start
的内核模块.
I'm writing a kernel module which involves the tasklist_lock
, __bss_start
.
这些符号不会导出.我敢肯定,即使不导出,我们也可以使用kernsym_lookup_name()
These symbols are not exported. I'm pretty sure even if not exported, we can access the symbols from text sections using kernsym_lookup_name()
T
represents text symbol.
D
and d
represents data segment symbol.
我可以使用kallsyms_lookup_name()
访问register_undef_hook()
和unregister_undef_hook()
.
但不是tasklist_lock
.
请分享您的知识,以便从内核模块(LKM)访问tasklist_lock
.
Please share your knowledge to access tasklist_lock
from kernel module(LKM).
推荐答案
请参见此高尚的帖子
#include <linux/module.h>
#include <linux/kallsyms.h>
#include <linux/string.h>
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Access non-exported symbols");
MODULE_AUTHOR("Stephen Zhang");
static int __init lkm_init(void)
{
char *sym_name = "__bss_start";
unsigned long sym_addr = kallsyms_lookup_name(sym_name);
char filename[256];
strncpy(filename, (char *)sym_addr, 255);
printk(KERN_INFO "[%s] %s (0x%lx): %s\n", __this_module.name, sym_name, sym_addr, filename);
return 0;
}
static void __exit lkm_exit(void)
{
}
module_init(lkm_init);
module_exit(lkm_exit);
这篇关于如何从LKM获取Linux内核的数据段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文