C ++プログラムのアセンブリコードを確認するにはどうすればよいですか?
これを行うための一般的なツールは何ですか?
C ++プログラムのアセンブリコードを確認するにはどうすればよいですか?
これを行うための一般的なツールは何ですか?
回答:
プログラムを自分でビルドする場合は、コンパイラにアセンブリソースを出力するように要求できます。ほとんどのUNIXコンパイラでは、-S
スイッチを使用します。
GNUアセンブラを使用している場合、でコンパイルする-g -Wa,-alh
と、ソースとアセンブリが混在してstdoutに表示されます(-Wa
コンパイラドライバにオプションをアセンブラに渡すように要求し-al
、アセンブリリストをオンにして、-ah
「高レベルソース」リストを追加します)。
g++ -g -c -Wa,-alh foo.cc
Visual Studioの場合は、を使用します/FAsc
。
バイナリをコンパイルした場合、
objdump -d a.out
UNIXでの使用(cygwinでも機能)、dumpbin /DISASM foo.exe
Windowsの場合。デバッガーは逆アセンブルすることもできます。
disas
GDBでコマンドを使用します。このサイトは現在私(2017)のために働いています:https : //godbolt.org/
使用しているデバッガーには、アセンブリビュー(Visual Studio、Borland IDE、gdbなど)が必要です。デバッガーを使用しておらず、プログラム内のアセンブリを確認したいだけの場合は、逆アセンブラーを使用するか、プログラムを実行してデバッガーでプログラムにアタッチし、そこからダンプを実行できます。オプションについては、逆アセンブラへの参照を参照してください。
誰かが述べたように、あなたのプラットフォームのデバッガーは良い出発点です。すべてのデバッガーと逆アセンブラーの削岩機については、IDA Proをご覧ください。
Unix / Linuxプラットフォーム(Cygwinを含む)では、を使用できますobjdump --disassemble <executable>
。
32ビットPEファイル用のPE Explorer逆アセンブラー。他の人のためのIDA。
Eclipseユーザーの場合は、逆アセンブリビューを使用できます。
逆アセンブリビューには、ロードされたプログラムが、比較のためにソースコードと混合されたアセンブラ命令として表示されます。現在実行中の行は矢印マーカーで示され、ビューで強調表示されます。逆アセンブリビューでは、次のタスクを実行できます。
- アセンブラー命令の開始時にブレークポイントを設定する
- ブレークポイントを有効および無効にし、それらのプロパティを設定します
- プログラムの分解手順をステップ実行
- プログラム内の特定の手順にジャンプします
Alt +8