【问题标题】:Changing virtual page premissions更改虚拟页面权限
【发布时间】:2019-12-25 12:52:21
【问题描述】:

我试图通过将存储在 sys_call_table 中的指针替换为指向我实现的函数的指针来覆盖我的模块中的 kill 命令。 我使用kallsyms_lookup_name() 系统调用来获取表的地址,并使用lookup_address() 来获取页面的地址。 现在,我的问题是内核使用 r/w 标志保护页面。 那么,给定一个虚拟页面地址,有没有办法修改 r/w 标志呢?

【问题讨论】:

    标签: c linux linux-kernel driver


    【解决方案1】:

    你需要这个吗?

    https://elixir.bootlin.com/linux/v4.3/source/arch/arm/mm/pageattr.c#L68\

    至少,您可以更改内核模块的内存属性。此外,您还可以更改内核文本内存属性。

    据我测试,如果我们尝试在内核模块中写入 ro 内存,MMU 会产生异常,您会看到“无效虚拟内存”访问。

    你必须传递虚拟内存地址。

    【讨论】:

    • 我试图通过将页面权限更改为 RW 来避免写入 r/o 页面。在内核模式下,我相信我可以选择更改权限。我也尝试用逻辑和\或直接操作这些位,但 linux 会崩溃。
    • 这是更改内核页面权限。您可以设置 ro 或 rw。您可以给出页面的起始地址和页数。
    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多