c/c++语言开发共享如何从LKM获取Linux内核的数据段

我正在编写一个涉及tasklist_lock__bss_start的内核模块。

这些符号不会导出。 我很确定即使没有导出,我们也可以使用kernsym_lookup_name()从文本部分访问符号

参考linux 3.2.28上的自定义模块如何调用print_cpu_info?

 $ vim System.map ... 80017be0 T register_undef_hook 80017c28 T unregister_undef_hook 80017c70 T do_unexp_fiq ... 806eb000 D mmlist_lock 806eb040 D tasklist_lock 806eb080 d softirq_vec .... 

T代表文本符号。
Dd表示数据段符号。

我可以使用kallsyms_lookup_name()访问register_undef_hook()unregister_undef_hook() kallsyms_lookup_name()

但不是tasklist_lock

请分享您的知识,以便从内核模块(LKM)访问tasklist_lock

    看到这个高贵的post

     #include  #include  #include  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): %sn", __this_module.name, sym_name, sym_addr, filename); return 0; } static void __exit lkm_exit(void) { } module_init(lkm_init); module_exit(lkm_exit); 

      以上就是c/c++开发分享如何从LKM获取Linux内核的数据段相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/565171.html

      (0)
      上一篇 2021年2月15日
      下一篇 2021年2月15日

      精彩推荐