C/c ++コードをx86アセンブリに変換できる簡単な方法(フリープログラムのような)はありますか?
どのcコンパイラも非常によく似た動作をし、cコードをコンパイルしてから、コンパイルされた実行可能ファイルを逆アセンブルできることを知っていますが、それは一種のやり過ぎです。必要なのは、数行のコードを変換することだけです。
誰かがそれを行うことができるいくつかのプログラムを知っていますか?
編集:GCCコンパイラがそれを行うことは知っていますが、それはAT&T構文であり、Intel構文を探しています(Intel構文と呼ばれるかどうかはわかりません)。 AT&T構文は私には少し意味不明に見え、一部のコマンドは逆の順序でオペランドを使用しますが、私が慣れている方法ではなく、非常に混乱する可能性があります。
Gccは-Sスイッチでそれを行うことができますが、それは嫌なほど醜いat&t構文になります。
GCCは、次のコマンドラインを使用してIntel構文アセンブリを出力できます。
gcc -S input.c -o output.asm -masm=intel
コマンドラインで-S
オプションを渡すと、gccはアセンブリを生成します。
Microsoft Visual C++は、/FAs
オプションでも同じことを行います。
lcc
コンパイラはマルチプラットフォームのクロスコンパイラです。次の方法でIntel構文アセンブリコードを生成できます。
lcc -S -Wf-target=x86/win32 foo.c
lcc
のアセンブリコードは、最近gcc
が吐き出すものよりもはるかに読みやすいと思います。
あなたが述べたように、あなたのコンパイラはすでにそれを行っており、おそらくアセンブルする前に停止するオプションがあります。
GCCの場合、-S
フラグを追加します。
gcc -S x.c
cat x.s
編集:プログラムがかなり短い場合は、 https://gcc.godbolt.org/ のオンラインサービスを使用できます。 =。
コンパイラとしてgccを使用している場合は、-Sオプションを指定してコンパイルし、アセンブリコードを生成できます。 http://www.delorie.com/djgpp/v2faq/faq8_20.html を参照してください
VC++では、次のコマンドを使用してアセンブリコードを一覧表示できます。
cl/FAs a.c
多くの人が指摘するように、ほとんどのコンパイラはそれを行います。構文が気に入らない場合は、awkまたはsedを使ったちょっとした作業で翻訳できるはずです。あるいは、あなたのためにそのビットを実行するプログラムがすでにどこかに書かれていなかったら、私は驚きます。
すべてのアーキテクチャには独自の名前があり、asmvolatileを使用して関連するスタックが完璧なソリューションであることがわかっている場合は、ビルドが異なることに注意してください。