我想获取vsyscall页面的地址供我自己使用。我在这里只有两个想法:改变编译器将此信息存储在__start或read / proc / [pid] / maps之后的某个已知位置。我真的不想阅读/ proc /因为这很慢而且不应该是必要的。我也不想进行编译器修改。有没有人有其他选择?有一个我应该知道的符号吗?
在这一点上,我很想将这个功能填充到我作为这项工作的一部分开发的模块中的ioctl调用中!
答案 0 :(得分:0)
这是黑暗中的刺:
如果您可以确定进程堆栈的起始地址,那么您可以找到提供给__start
的参数。然后,您可以通过相应类型的指针访问参数,这些指针设置为初始堆栈指针的相应偏移量。
根据文章How main() is executed on Linux , by Hyouck "Hawk" Kim,__start
的前几条指令将在调用__libc_start_main
之前以确定的方式编写初始参数。
显然,这样的任何方法都是特定于平台的,如果__start
的实施发生了变化,则会导致不稳定。