我阅读了一些使用 -fPIC 参数编译共享库的文档,.so 的 .text 序列将在进程 fork 的动态链接阶段共享(例如,进程会将 .so 映射到相同的物理地址)
我对谁(内核或 ld.so )以及如何实现这一点感兴趣?也许我应该跟踪代码,但我不知道从哪里开始。
尽管如此,我还是尝试验证该声明。
我决定检查 libc.so 中的 printf 之类的函数地址,以便所有 c 程序都将链接。我得到了进程的printf虚拟地址,需要得到物理地址。尝试编写内核模块并将地址值传递给内核,然后调用 virt_to_phys。但它不起作用,因为 virt_to_phys 仅适用于 kmalloc 地址。
因此,进程页表查找可能是查找虚拟地址到物理地址的解决方案。有没有办法做页表查看?或者其他方式可以适应验证实验?
提前致谢!