我试图理解每次编译Linux内核时创建的System.map文件,我试图理解System.map文件中显示的值。
以下是来自它的样本信息
000001d5 A kexec_control_code_size
00400000 A phys_startup_32
c0400000 T _text
c0400000 T startup_32
c04000b4 T start_cpu0
c04000c4 T startup_32_smp
c04000e0 t default_entry
c0400158 t enable_paging
c04001da t is486`
如果您看到第一行,则符号kexec_control_code_size
的类型显示为A
,我知道A
表示符号的值是绝对的,但我不是&#39 ;能够完全解码究竟意味着什么。值是否表示符号的地址?绝对地址是否意味着每次内核加载到内存时此符号都会出现在此地址?
如果问题太基础,请原谅。
答案 0 :(得分:0)
您可以通过" man nm"检查符号类型。 nm工具显示目标文件中的所有符号。有关在nm nm下可以找到的符号类型的详细信息。可以使用nm工具检查Linux内核模块.ko文件和内核对象文件。您还可以使用objdump和readelf从zImage或uImage或任何内核映像以及内核模块中调查符号。尝试使用手册页进行详细说明。可以计算符号的地址,例如从某个主要点的偏移,例如段开始。符号地址计算的其他方法是地址的绝对值(可能是与地址空间有关的绝对值?)。外部符号应该是绝对的。标记为绝对的符号通过任何链接操作保留相同的地址。
答案 1 :(得分:0)