linux - 在哪里可以找到 Linux 全局 mem_map 数组的地址?

标签 linux kernel

我的发行版 (Ubuntu 14.04.3 LTS) 似乎没有导出这个引用,所以我无法在模块加载时解析地址。我正在寻找另一种无需重新编译内核即可确定地址的方法。

我在 macbook pro 上以访客身份在 VMware Fusion 下运行。内核是 3.13.0-74-generic。

提前致谢

最佳答案

使用 kallsyms_lookup_name。它在 linux/kallsyms.h 中定义为

unsigned long kallsyms_lookup_name(const char *name);

用法很简单:

struct page *my_mem_map = (struct page*)kallsyms_lookup_name("mem_map");

kallsyms_lookup_name 从内核 2.6.33 开始为模块导出。

对于较早的内核,或者一次查找多个符号,可以使用通用函数kallsyms_on_each_symbol。它遍历所有符号并为它们调用用户指定的函数。

关于linux - 在哪里可以找到 Linux 全局 mem_map 数组的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797918/

相关文章:

Linux 打印状态检查脚本

c - "kill"是如何工作的?特别是 "kill"如何处理被阻止的进程?

macos - 内核 panic 时回溯

c - 我的内核模块使用了多少内存?

ubuntu - 在最新的 ubuntu 上编译和安装旧内核

c - 从用户空间获取打开文件的引用计数(inode->i_count)

ruby - 如何在Linux上使用Ruby实现实时USB存储检测?

java - Linux 中的 Spring PropertyPlaceholderConfigurer

linux - 用于将数据传入和传出基于 WebKit 的浏览器的方法

linux - 使用python中的子进程在linux终端上执行命令