如何从LKM获取Linux内核的数据段 [英] How to get data segment of Linux kernel from LKM

查看:122
本文介绍了如何从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代表文本符号.
Dd代表数据段符号.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆