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

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

Mary-Kate Olsen
リリース: 2024-12-27 02:48:14
オリジナル
541 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート