1

我正在查看 linux kerenl 中的 arch/arm/boot/compressed/head.S。

我的板子是 odroid-S,当我看到从 readelf -S arch/arm/boot/compressed/vmlinux 获得的符号表时,我看到了这些代码。

    LC0:  .word LC0         @ r1 
    .word   __bss_start     @ r2 
    .word   _end            @ r3 
    .word   zreladdr        @ r4 
    .word   _start          @ r5 
    .word   _got_start      @ r6 
    .word   _got_end        @ ip 
    .word   user_stack+4096     @ sp `

但是他们每个人拥有的地址没有排序。例如,LC0 值为 0000013c,但 __bss_start 为 0031a734。

谁能告诉我是什么证实了这些符号的价值???

4

1 回答 1

3

在编译操作系统或引导加载程序等软件的裸机实现时,将有一个特定于平台的链接器脚本将指定每个部分将进入的地址。链接描述文件将根据平台的内存映射来编写。

当操作系统加载可执行文件时,加载的操作系统将读取 elf 文件中的各个部分,并确保将每个部分放入进程内存映射的正确部分。然后,操作系统加载程序将根据需要修复任何未链接的地址。

于 2012-11-30T16:00:47.330 回答