147

C ++プログラムのアセンブリコードを確認するにはどうすればよいですか?

これを行うための人気のあるツールは何ですか?

4

14 に答える 14

181

コンパイラに尋ねる

プログラムを自分でビルドする場合は、コンパイラにアセンブリ ソースを発行するように依頼できます。ほとんどの UNIX コンパイラでは、-Sスイッチを使用します。

  • GNU アセンブラーを使用している場合、 を使用してコンパイルする-g -Wa,-alhと、stdout に混合ソースとアセンブリが出力されます (-Waコンパイラー ドライバーにアセンブラーにオプションを渡すように要求-alし、アセンブリ リストをオンにし、-ah「高レベル ソース」リストを追加します)。

    g++ -g -c -Wa,-alh foo.cc

  • Visual Studio の場合は、 を使用します/FAsc

バイナリを覗く

コンパイル済みのバイナリがある場合は、

デバッガを使用する

デバッガーは、逆アセンブルを表示することもできます。

  • disasGDB でコマンドを使用します。Intel 構文を好む場合に
    使用します。set disassembly-flavor intel
  • またはWindows 上の Visual Studioの逆アセンブリ ウィンドウ。
于 2009-05-08T15:22:52.277 に答える
37

GCC/G++ では、-S. something.sこれにより、アセンブリ コードを含むファイルが出力されます。

編集:出力をIntel構文(IMOであり、はるかに読みやすく、ほとんどのアセンブリチュートリアルで使用されている)にしたい場合は、-masm=intel.

于 2009-05-08T15:25:44.487 に答える
25

Visual Studioで;

  1. ブレークポイントを設定する
  2. ブレークポイントで停止するまでプログラムを実行する
  3. ソースコードを右クリックして、「逆アセンブリを表示」を選択します
于 2009-05-08T15:23:17.237 に答える
15

gcc /g++の場合

gcc -save-temps -fverbose-asm prog.c

これにより、すべてのasm行で使用される変数に関するコメントを含むprog.sが生成されます。

    movl    $42, -24(%ebp)  #, readme
    movl    -16(%ebp), %eax # pid, pid
    movl    %eax, 4(%esp)   # pid,
    movl    $.LC0, (%esp)   #,
    call    printf  #
于 2010-02-08T17:08:12.280 に答える
14

このサイトは現在私のために働いています (2017): https://godbolt.org/

于 2017-04-25T14:39:17.707 に答える
6

多くの人が、特定のコンパイラでアセンブリコードを出力する方法をすでに説明しています。別の解決策は、オブジェクトファイルをコンパイルし、objdumpreadelf(Unixの場合)、DUMPBIN(link)(Windowsの場合)などのツールを使用してダンプすることです。実行可能ファイルをダンプすることもできますが、出力を読み取るのはより困難になります。

これには、どのコンパイラでも同じように機能するという利点があります。

于 2009-05-08T17:38:56.117 に答える
6

使用しているデバッガーには、アセンブリ ビューが必要です (Visual Studio、Borland IDE、gdb など)。デバッガーを使用しておらず、プログラム内のアセンブリを確認したいだけの場合は、逆アセンブラーを使用するか、プログラムを実行してデバッガーでアタッチし、そこからダンプを実行できます。オプションについては、逆アセンブラのリファレンスを参照してください。

于 2009-05-08T15:19:41.473 に答える
5

ほとんどのコンパイラには、アセンブリ リストを出力するオプションがあります。たとえば、VisualStudio では次のようなものを使用できます。

cl.exe /FAfile.asm file.c

ただし、読みやすくするために、ほとんどのデバッガーは元のソースと逆アセンブリをインターリーブするビューを提供するため、コードをコンパイラーの出力と 1 行ずつ比較できます。

于 2009-05-08T15:25:46.247 に答える
5

他の誰かが述べたように、プラットフォームのデバッガーは良い出発点です。すべてのデバッガーと逆アセンブラーのジャックハンマーについては、IDA Pro をご覧ください。

Unix/Linux プラットフォーム (Cygwin を含む) では、objdump --disassemble <executable>.

于 2009-05-08T15:22:26.257 に答える
4

32 ビット PE ファイル用のPE Explorer 逆アセンブラー。他の人のためのIDA。

于 2009-07-17T23:51:00.757 に答える
3

このサイトを試すこともできます: http://assembly.ynh.io/

そこに C または C++ コードを貼り付けて青いボタンを押すと、同等のアセンブリ バージョンが表示されます。

于 2015-08-01T05:50:44.550 に答える
2

Visual Studioでは、C++プロジェクトのアセンブラーリストを生成できます。

プロジェクトのプロパティに移動し、次にC ++ /出力ファイルに移動して、アセンブラー出力設定とASMリストの場所をファイル名に設定します。

于 2009-05-08T16:46:19.033 に答える
1

Intel Mac OS X 10.8 (Mountain Lion) では、-masm=intelディレクティブは機能しませんでした。ただし、Xcodeがインストールされている場合は、「otool」という名前のツールがインストールされているはずです。

otool code.o -tV

コンパイルされたオブジェクト コードをパラメーターとして指定する必要があります。

于 2012-08-20T13:40:07.577 に答える
0

Eclipse ユーザーの場合は、逆アセンブリ ビューを使用できます。

[逆アセンブリ] ビューには、ロードされたプログラムが、比較のためにソース コードと混合されたアセンブラ命令として表示されます。現在実行中の行は矢印マーカーで示され、ビューで強調表示されます。逆アセンブリ ビューでは、次のタスクを実行できます。

  • アセンブラ命令の先頭にブレークポイントを設定する
  • ブレークポイントの有効化と無効化、およびそれらのプロパティの設定
  • プログラムの逆アセンブル手順を実行する
  • プログラム内の特定の命令にジャンプする
于 2011-02-28T08:08:30.633 に答える