这些地址中包含什么?

这些地址中包含什么?

我正在研究虚拟机的多处理器记录重放功能。我有一个由虚拟 CPU 在虚拟机中完成的非确定性内存访问的日志。
其中很大一部分指向内核空间内存,即高于 0Xc0000000。
例如,这里列出了在虚拟机中运行 SPLASH 基准测试后 10 个最常访问的内核内存地址

0xfffb5000                                                    
0xc1779db0                                               
0xc18b6910                                                      
0xc1771a44                                                      
0xc1771a40                                                      
0xc1779e00                                                      
0xc18b67e0                                                      
0xc18b693c                                                      
0xc18b67f0                                                      
0xfffa1000

我想知道是否有某种方法可以找到这些内存地址中的确切内容...是内核堆栈,vsyscall页面,调度程序的就绪列表...
这样我就可以想出一些方法来解决这个开销加快记录重放...
欢迎提示在内核代码中查看的位置

谢谢

答案1

在物理机上,我会查看 /boot/System.map* (无论该文件在您的发行版中被称为什么)。

我的猜测是 KVM 虚拟机内也是如此。

答案2

KVM-QEMU 支持调试 - 您可以连接到虚拟机并gdb查看其中发生的情况(当然,您需要正确设置调试符号)。

答案3

好吧,一些地址指向内核中的静态数据,例如 seqlocks 使用的增量器。
内核objdump显示了大约一半的地址,但对于存储在堆栈和堆上的地址,objdump 没有用。

cat /proc/kallsysm 显示包含它的模块导出的所有变量/函数。

我认为我们不知道这些位置存储了什么......

相关内容