-1

このチュートリアルを読みました: http://www.osdever.net/tutorials/view/writing-a-simple-c-kernel チュートリアルが提供する likerscript を使用してファイルをリンクしてみました。しかし、LD は、nasm によって出力されたファイルを読み取れないというエラーを表示します。私が間違っていることを誰かが知っていますか?

4

1 に答える 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 に答える