0

私は 32 ビット プロテクト モード カーネルで作業しています。テキスト領域が 0x100000 で始まるコードを生成しようとしています。次のコマンドを発行します:=

ld -melf_i386 $(OBJS)-o カーネル -Ttext 0x100000

結果の 32 ビット ELF ファイルを調べると、e_entry が 0x100000 であることが予想されます。しかし、そうではありません。理由がわからないので、それが私の質問です。カーネルの一部は nasm で記述されており、32 ビット ELF をターゲットにして 64 ビット Linux でコンパイルされています。上記の ld コマンドによって生成される実際の e_entry 値は 0x116D5A です。これは、-fpic などの必要なコンパイラ オプションに関係しているのか、nasm 生成コードとの非互換性に関係しているのか、それとも ld にバグがあるのか​​ 疑問に思っています。誰か助けてください。ありがとう

:= ld -r -melf_i386 $(OBJS)-o kernel -Ttext 0x100000 のように、上記の ld に -r オプションを指定することに注意してください。

e_entry が 0x100000 の出力を生成しますが、ファイルは実行可能ファイルではありません。実行可能ファイルにする必要があります。

4

1 に答える 1