【问题标题】:In a Linux user space process what is the address of the vsyscall page?在 Linux 用户空间进程中,vsyscall 页面的地址是什么?
【发布时间】:2010-03-08 18:31:37
【问题描述】:

我想获取 vsyscall 页面的地址以供我自己使用。我这里只有两个想法:更改编译器以在将这些信息提供给 __start 后将其存储在某个已知位置,或者读取 /proc/[pid]/maps。我真的不想阅读 /proc/ 因为那很慢而且没有必要。我也不想进行编译器修改。有没有人有替代方案?有没有我应该知道的符号?

此时我很想将此功能填充到我作为这项工作的一部分开发的模块中的 ioctl 调用中!

【问题讨论】:

    标签: c linux system-calls


    【解决方案1】:

    这是在黑暗中刺伤:

    如果您可以确定进程堆栈从哪个地址开始,那么您可能会找到提供给__start 的参数。然后,您可以通过设置为与初始堆栈指针相应的偏移量的适当类型的指针来访问参数。

    根据How main() is executed on Linux , by Hyouck "Hawk" Kim的文章,__start的前几条指令会在调用__libc_start_main之前以确定性的方式写入初始参数。

    显然,这样的任何方法都是特定于平台的,并且如果 __start 的实现发生更改,则会出现不稳定。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2011-11-08
      • 1970-01-01
      相关资源
      最近更新 更多