【问题标题】:How can I get a variable's address inside kernel?如何在内核中获取变量的地址?
【发布时间】:2017-05-10 17:52:08
【问题描述】:

目前,我想获取运行队列的地址,它是内核中的一个变量,不打算对外部的模块或代码可见。

我可以通过检查 /proc/kallsyms 来获取运行队列的地址。但是这个地址不是真正的地址,因为 ASLR。

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

提前致谢!

【问题讨论】:

    标签: linux module linux-kernel kernel


    【解决方案1】:

    您的查询:-

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

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

    我可以通过检查 /proc/kallsyms 获得运行队列的地址。

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

    1. 宏 cpu_rq(processor) 返回指向与给定处理器关联的运行队列的指针。
    2. 宏this_rq()返回当前处理器的运行队列;
    3. 宏 task_rq(task) 返回一个指向运行队列的指针 给定任务的队列。

    所以,我认为要获取所有运行队列的信息,您必须制作多线程应用程序并将每个线程专用于特定的 CPU(设置 cpu 亲和力)。

    【讨论】:

    • 我的问题是我不能直接使用你提到的这些功能。这些函数最终使用runqueues的地址返回一个特定的runqueue。
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多