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

OS やブートローダーなどのソフトウェアのベアメタル実装をコンパイルする場合、プラットフォーム固有のリンカー スクリプトを使用して、各セクションのアドレスを指定します。リンカ スクリプトは、プラットフォームのメモリ マップに従って記述されます。

オペレーティング システムが実行可能ファイルをロードすると、ロードされたオペレーティング システムは、elf ファイルのさまざまなセクションを読み取り、それぞれがプロセスのメモリ マップの正しいセクションに配置されるようにします。OS ローダーは、リンクされていないアドレスを必要に応じて修正します。

于 2012-11-30T16:00:47.330 に答える