1. ホーム
  2. c++

[解決済み] gccでC/C++のソースからアセンブラ出力を得るにはどうしたらいいですか?

2022-03-21 03:56:23

質問

どのようにすればよいのでしょうか?

何かがどのようにコンパイルされるかを分析したい場合、生成されたアセンブリコードをどのように取得すればよいですか?

どのように解決するのですか?

を使用します。 -S を gcc (または g++) に追加してください。

gcc -S helloworld.c

これはプリプロセッサ (cpp) を helloworld.c の上で実行し、最初のコンパイルを行った後、アセンブラが実行される前に停止します。

デフォルトでは、これはファイル helloworld.s . 出力するファイルは -o オプションで指定します。

gcc -S -o my_asm_output.s helloworld.c

もちろん、これはオリジナルのソースがある場合のみ有効です。 結果としてのオブジェクトファイルしか持っていない場合の代替手段としては objdump を設定することで --disassemble オプション(または -d を省略した形)。

objdump -S --disassemble helloworld > helloworld.dump

このオプションは、オブジェクトファイルに対してデバッグオプションが有効になっている場合に最も効果的です( -g を使用し、かつ、そのファイルが削除されていない場合。

実行中 file helloworld は、objdumpを使用することで得られる詳細なレベルについて、いくらかの示唆を与えてくれるでしょう。