我的发行版 (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/