我发现 System.map 文件包含符号的地址。是否涉及到系统调用?我读到它仅在新编译新内核时更新。
那么这是否意味着除了新的内核编译之外,这些总是存储在相同的地址中?
答案1
System.map
包含一个符号表,即 Linux 内核中的函数名称列表,其中每个函数的代码在内存中加载的地址(这些地址不是物理地址,它们位于内核的地址空间中,就像任何可执行符号表一样加载的进程地址空间)。这不仅限于系统调用(向用户进程公开的接口):该文件还列出了可能由加载的模块调用的函数,甚至是内部函数。系统调用是名称以 开头的符号sys_
。
地址与特定的内核二进制文件( 或其他格式;图像格式不会更改地址,它只是一种编码)相关vmlinux
联bzImage
;对于给定的内核源、配置和编译器,它们是可重现的。该文件是由生成的scripts/mksysmap
内核构建过程接近结束时;它的输出是nm
命令。
该文件主要用于调试,但在编译一些使用不稳定内核接口的第三方模块时也会读取该文件(不稳定,如从一个版本更改为下一个版本)。