4

私はbinutilsやgccantに慣れていないので、いくつかの一般的な質問があります。これについては、マニュアルには記載されていません。

Cとアセンブリ(nasm構文)を使用しており、出力に生のバイナリファイルが必要です。まず、コードをパラメーターを使用してobjecファイルにコンパイルします。

cc -nostartfiles -nostdlib -c -ffreestanding <input file(s)> ;cc or gcc no matter

次に、セグメントを必要な順序に並べるだけの簡単なスクリプトを使用して、すべてのファイルをリンクします。

ld -T <script> -o <o.file> <in.file(s)>  ;nothing special here

そして、生のバイナリを取得するには、objcopyを使用します

objcopy -O binary <o.file> <in.file> ;can't be simplier

全体として、 .textセグメントと.dataセグメント、および32ビットコードのみを含むバイナリファイルが必要です。

1.この方法で欲しいものを手に入れることはできますか?

2.それを行う他の方法はありますか?(簡単でも複雑でも)


助けてくれてありがとう。


Asmコードのコンパイルに問題はなく、Cコードのほとんどすべての問題があります。

4

2 に答える 2

0

ldマニュアルページに出くわすと、/DISCARD/ブロックはそこにリストされているすべてのものを最終出力から除外すると言われました。

だから私はこのブロックを、、ブロックの後に挿入し.textました.data.bss

/DISCARD/ : 
{
    *(.comment)
    *(.eh_frame)
    *(.note.GNU-stack)
}

リンカスクリプトの冒頭にあるこの行も同様です。

OUTPUT_FORMAT("binary")

したがって、私はobjcopyもう使用する必要はありません。

于 2015-10-19T16:58:26.403 に答える
-2

このコマンドを使用してソースファイルをコンパイルする必要があります

nasm -o bin <SOURCE FILES>

これにより、純粋なバイナリ出力が生成されます。

于 2012-07-23T20:19:41.803 に答える