如何在内核中获取变量的地址?

时间:2016-12-26 08:10:56

标签: linux module linux-kernel kernel

目前,我想获取runqueues的地址,这是内核中的一个变量,并且不计划对外部的模块或代码可见。

我可以通过检查/ proc / kallsyms来获取runqueues的地址。但由于ASLR,这个地址不是真正的地址。

我真的不想更改内核所以我决定插入一个模块。 有谁知道如何在内核中获取变量的地址?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的查询: -

  

我想得到runqueues的地址,这是一个变量   内核?

runqueue由struct runqueue表示,它是调度程序中的核心数据结构而不是变量。

  

我可以通过检查/ proc / kallsyms来获取runqueues的地址。

有一些宏用于获取与给定处理器或进程关联的runqueue。从这个宏我们得到runqueue结构和CPU id的数组的基地址。我相信你无法从/ proc / kallsysm检索runqueue信息。

  1. 宏cpu_rq(处理器)返回指向与给定处理器关联的runqueue的指针。
  2. 宏this_rq()返回当前处理器的runqueue;
  3. 宏task_rq(task)返回指向runqueue的指针 给定的任务排队。
  4. 所以,我想要获取所有runqueue的信息,你已经制作了多线程应用程序并将每个线程专用于特定的CPU(设置cpu亲和性)。