ホームページ >バックエンド開発 >C++ >GCC と objdump を使用して C/C からアセンブリ コードを生成するにはどうすればよいですか?

GCC と objdump を使用して C/C からアセンブリ コードを生成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 02:48:14557ブラウズ

How to Generate Assembly Code from C/C   using GCC and objdump?

GCC で C/C ソースからアセンブラ コードを出力する方法

コンパイルされたコードを解析する場合、生成されたアセンブリ コードにアクセスすることが不可欠です。 GCC では、これは「-S」オプションを使用して実現できます。

-S オプションの使用

デフォルトでは、「-S」は、ソース ファイルを作成し、初期コンパイルを実行しますが、アセンブラを呼び出す前に停止します。 「-fverbose-asm」と組み合わせると、このオプションは C コードをコメントとしてアセンブリ コードに関連付けます。特に最適化レベル -O0 で役立ちます。

gcc -S helloworld.c

出力ファイルのカスタマイズ

出力ファイルは通常、ソース ファイルにちなんで .s 拡張子を付けた名前が付けられます。出力ファイルの場所をカスタマイズするには、「-o」オプションを使用します:

gcc -S -o my_asm_output.s helloworld.c

または、「-o -」を使用してコンソールに出力できます:

gcc -S -o - helloworld.c | less

実行可能オブジェクトのアセンブリへのアクセス

元のソース コードがない場合ただし、オブジェクト ファイルがある場合は、「--disassemble」オプション (-d) を指定して objdump を使用します。

objdump -S --disassemble helloworld > helloworld.dump

ソース行参照を使用した強化された逆アセンブリ出力については、元のコンパイルでのデバッグを有効にします (-g)。

追加の Objdump オプション

の使用を検討してくださいさらに詳細な分析のためのこれらの objdump オプション:

  • -rwC: シンボルの再配置、行折り返しの無効化、および C 名のデマングル
  • -Mintel: x86 逆アセンブリ用の Intel 構文

たとえば、次のコマンドは豊富な逆アセンブリを提供します。出力:

objdump -drwC -Mintel -S foo.o | less

プレースホルダーを含む .o ファイル内のシンボル参照を表示するには、「-r」が重要であることを覚えておいてください。

以上がGCC と objdump を使用して C/C からアセンブリ コードを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。