このチュートリアルを読みました: http://www.osdever.net/tutorials/view/writing-a-simple-c-kernel チュートリアルが提供する likerscript を使用してファイルをリンクしてみました。しかし、LD は、nasm によって出力されたファイルを読み取れないというエラーを表示します。私が間違っていることを誰かが知っていますか?
質問する
346 次
1 に答える
3
示されているとおりにチュートリアルを正確に実行した場合、問題はおそらくここにあります。
nasm -f aout kernel_start.asm -o ks.o
これにより、完全に時代遅れのa.out形式のオブジェクト ファイルが生成されます。おそらく、Windows または Linux ホスト システムのいずれかでチュートリアルに取り組んでいるでしょう。これらのシステムに付属するリンカーは、それぞれ PECOFF および ELF 形式のオブジェクト ファイルを想定しています。-f
上記のコマンドの の後にnasm
、正しい形式を生成する別のものがおそらくあります。
あるいは、代わりに AT&T アセンブリ言語の書き方を学びましょう。.asm
次に、C ソース コードと同じようにファイルからオブジェクト ファイルを作成するgcc -c
と、適切な形式が自動的に取得されます。そのチュートリアルにある簡単な起動ファイルに相当する AT&T は、次のようになります。
.text
.globl start
start:
call k_main
cli
hlt
call
命令の引数から先頭のアンダースコアを削除したことにも注意してください。このアンダースコアは、C コードがa.out形式のオブジェクト ファイルにコンパイルされている場合にのみ適切ですが、そうではないと思われます。
于 2013-08-14T01:05:29.893 に答える