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