在Linux用户空间进程中,vsyscall页面的地址是什么?

时间:2010-03-08 18:31:37

标签: c linux system-calls

我想获取vsyscall页面的地址供我自己使用。我在这里只有两个想法:改变编译器将此信息存储在__start或read / proc / [pid] / maps之后的某个已知位置。我真的不想阅读/ proc /因为这很慢而且不应该是必要的。我也不想进行编译器修改。有没有人有其他选择?有一个我应该知道的符号吗?

在这一点上,我很想将这个功能填充到我作为这项工作的一部分开发的模块中的ioctl调用中!

1 个答案:

答案 0 :(得分:0)

这是黑暗中的刺:

如果您可以确定进程堆栈的起始地址,那么您可以找到提供给__start的参数。然后,您可以通过相应类型的指针访问参数,这些指针设置为初始堆栈指针的相应偏移量。

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

显然,这样的任何方法都是特定于平台的,如果__start的实施发生了变化,则会导致不稳定。