gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:09:23 24 4
gpt4 key购买 nike

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

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

最佳答案

这是黑暗中的刺:

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

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

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

关于c - 在Linux用户空间进程中,vsyscall页面的地址是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com