2

私のファイルは bootpack.c で、その中に機能void f() { while(1); }があります。実行可能なマシンコードに直接生成したい。したがって、次のようにコンパイルします。

gcc -c -nostdinc -fno-builtin bootpack.c
ld -nostdlib file.o -o bootpack.bin

しかし、bootpack.bin が 3.84KB であることがわかりました。ただのループなので、数バイトで済むはずだと思いました。なにが問題ですか?そして、このファイルを正しく生成する方法は?

4

2 に答える 2

1

binaryGNU (BFD ベース) リンカーの出力形式として使用できます。

ld -nostdlib file.o --oformat=binary -o bootpack.bin

次に、次のように逆アセンブルできます。

objdump -b binary -m i386 -D bootpack.bin

( の代わりにターゲット アーキテクチャを置き換えますi386)。

于 2012-09-20T17:55:08.410 に答える
0

シンボルテーブル情報が含まれているため、実行可能ファイルのサイズを小さくするには、stripコマンドを使用できます。

「strip--strip-allexecutable-file-name」として使用すると、シンボルテーブルなどの余分な情報が削除されます。gccオプション-sでも使用できますが、gccには使用できるオプションがあります。

于 2012-09-20T15:24:20.833 に答える