linux内核加载的基址

8 linux elf kernel-module virtual-memory linux-kernel

我对内核如何加载到内存中有一些疑问。经过检查,/proc/kallsyms我能够找到内核中各种符号的地址。

$ cat /proc/kallsyms | head -n 10
00000000 t __vectors_start
80008240 T asm_do_IRQ
80008240 T _stext
80008240 T __exception_text_start
80008244 T do_undefinstr
80008408 T do_IPI
8000840c T do_DataAbort
800084a8 T do_PrefetchAbort
80008544 t gic_handle_irq
800085a0 T secondary_startup
Run Code Online (Sandbox Code Playgroud)
  1. 有什么办法可以找到加载内核的基地址吗?
  2. 在用户空间中,假设我使用 libc 并puts在 0x200 的偏移量处说函数。当加载到内存 at 说地址时0x8048000,我将能够puts0x8048000 + 0x200. 内核也一样吗?即内核映像是否作为 1 个连续.text部分加载到内存中?

inc*_*ent 1

内核加载到映射的1MiBPAGE_OFFSET + 0x00100000物理地址(虚拟地址)。通常8MiB的虚拟空间是为内核映像保留的PAGE_OFFSET + 0x00100000