web-dev-qa-db-ja.com

cコードをx86アセンブリに変換する簡単な方法は?

C/c ++コードをx86アセンブリに変換できる簡単な方法(フリープログラムのような)はありますか?

どのcコンパイラも非常によく似た動作をし、cコードをコンパイルしてから、コンパイルされた実行可能ファイルを逆アセンブルできることを知っていますが、それは一種のやり過ぎです。必要なのは、数行のコードを変換することだけです。

誰かがそれを行うことができるいくつかのプログラムを知っていますか?

編集:GCCコンパイラがそれを行うことは知っていますが、それはAT&T構文であり、Intel構文を探しています(Intel構文と呼ばれるかどうかはわかりません)。 AT&T構文は私には少し意味不明に見え、一部のコマンドは逆の順序でオペランドを使用しますが、私が慣れている方法ではなく、非常に混乱する可能性があります。

19
Bob

Gccは-Sスイッチでそれを行うことができますが、それは嫌なほど醜いat&t構文になります。

GCCは、次のコマンドラインを使用してIntel構文アセンブリを出力できます。

gcc -S input.c -o output.asm -masm=intel
46
SoapBox

コマンドラインで-Sオプションを渡すと、gccはアセンブリを生成します。

Microsoft Visual C++は、/FAsオプションでも同じことを行います。

13
James McNellis

lcc コンパイラはマルチプラットフォームのクロスコンパイラです。次の方法でIntel構文アセンブリコードを生成できます。

lcc -S -Wf-target=x86/win32 foo.c

lccのアセンブリコードは、最近gccが吐き出すものよりもはるかに読みやすいと思います。

7
Norman Ramsey

あなたが述べたように、あなたのコンパイラはすでにそれを行っており、おそらくアセンブルする前に停止するオプションがあります。

GCCの場合、-Sフラグを追加します。

gcc -S x.c
cat x.s

編集:プログラムがかなり短い場合は、 https://gcc.godbolt.org/ のオンラインサービスを使用できます。 =。

3
kennytm

コンパイラとしてgccを使用している場合は、-Sオプションを指定してコンパイルし、アセンブリコードを生成できます。 http://www.delorie.com/djgpp/v2faq/faq8_20.html を参照してください

1
D.C.

VC++では、次のコマンドを使用してアセンブリコードを一覧表示できます。

cl/FAs a.c

0

多くの人が指摘するように、ほとんどのコンパイラはそれを行います。構文が気に入らない場合は、awkまたはsedを使ったちょっとした作業で翻訳できるはずです。あるいは、あなたのためにそのビットを実行するプログラムがすでにどこかに書かれていなかったら、私は驚きます。

0
BCS

すべてのアーキテクチャには独自の名前があり、asmvolatileを使用して関連するスタックが完璧なソリューションであることがわかっている場合は、ビルドが異なることに注意してください。

0
yoavstr