【问题标题】:access data segment from kernel space从内核空间访问数据段
【发布时间】:2013-01-25 02:56:50
【问题描述】:

我希望能够知道页表中属于进程的哪些页用作数据段。 我正在为 amd64 使用 Linux 内核 v 3.2

这是我之前做过但没用的:

  1. 使用task->mm->start_data访问数据段(task是目标进程的task_struct)。

  2. 搜索task->mm->mmap(链表)并将每个vm_area_structvm_start)的起始地址与task->mm->start_data进行比较。这里我假设数据段的开头与页面的开头对齐。

所有这些都应该在内核模块中完成。

谢谢。

【问题讨论】:

  • 为什么每个页面的执行属性都不是一个足够的测试(即文本页面允许执行而数据页面不能)?
  • 我没有假设或提到“复制”,那么你为什么要提出这个断言呢?您最初的问题仅提到“数据段”,但现在您正在寻找“静态变量”? en.wikipedia.org/wiki/NX_bit BTW Linux 中的“文本页”(相对于“数据页”)与“代码页”相同。假设您理解“文本”的含义,我可能犯了一个错误。

标签: c memory-management linux-kernel virtual-memory memory-model


【解决方案1】:

经过一些研究,看起来像将 task->mm->start_data 传递给 get_user_pages 并结合 kmap 可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2013-01-21
    • 2018-05-22
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多