Meaning of address' in System.map file
What does this address specify? 开发者_运维知识库Address of where these are loaded in memory?
The kernel starts at a fixed location in the virtual address space of a process. The linux kernel usually [depending on your system architecture] is located in the top 1 GB of the 4GB virtual address space. So the kernel for a system architecture with 3G/1G split, starts at the address 0xC0000000. Depending on the platform's memory map, this will be mapped to a physical address in the physical memory.
The system.map file is the kernel symbol table. It has the symbols listed along with their virtual addresses. To find out where these symbols are loaded in the main memory, subtract PAGE_OFFSET [for 3G/1G systems this is 0xC00000000] from the symbol address to get the offset and add this offset to the starting physical address of the kernel in the physical memory as determined from the system memory map.
It's the kernel virtual address. That is it's the address of the symbol in memory when seen from the perspective of the kernel running with address translation enabled, ie. not in real mode.
On most (?) platforms there is a simple formula for turning those addresses into real addresses, ie. the actual address in RAM, but that may not necessarily be the case.
精彩评论