Intel構文でアセンブリコードを生成するためにgccをどのように使用しますか?


151

gcc -SAT&T構文でアセンブリコードを生成しますオプション、インテルの構文でファイルを生成する方法はありますか?または、2つの間で変換する方法はありますか?


5
あなたは簡単にLLVM-MCとのシェルで単一命令を変換することができますecho "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel提供しますpacksswb -84(%bp,%si), %mm0
ヤヌスTroelsen

回答:


198

これを試しましたか?

gcc -S -masm=intel test.c

テストされていませんが、このフォーラムで誰かがそれがうまくいったと主張しているのを見つけました。

私はMacでこれを試してみたが失敗したので、manページを調べた。

   -masm=dialect
       Output asm instructions using selected dialect.  Supported choices
       are intel or att (the default one).  Darwin does not support intel.

それはあなたのプラットフォームで動作するかもしれません。

Mac OSXの場合:

clang++ -S -mllvm --x86-asm-syntax=intel test.cpp

出典:https : //stackoverflow.com/a/11957826/950427


ファイル名att2intel.sedは正しくありませんが、そのsedスクリプトは、IntelからATTへと逆の変換を行います。
Jonathon Reinhart、2011年

誰もがMac用のソリューションを持っていますか?
ジョシュアチーク

Clangは現在Intel構文を使用できません。LLVMバグ24232を参照してください:[X86]インラインアセンブリオペランドが.intel_syntaxで機能しません。また、Clangはprefix/を無視しますnoprefix(Clangがアセンブリを消費するかどうかが重要かどうかはわかりません)。
jww 2015

17

gcc -S -masm=intel test.c

私と一緒に働きますか。しかし、私は別の方法で言うことができますが、これはgccの実行とは関係ありません。実行可能ファイルまたはオブジェクトコードファイルをコンパイルしてから、次のようにobjdumpを使用してIntel asm構文でオブジェクトコードを逆アセンブルします。

 objdump -d --disassembler-options=intel a.out

これは役立つかもしれません。


3
objdump -d -M intelと同じ
David天宇Wong

5

このコードはCPPファイルにあります。

#include <conio.h>
#include <stdio.h>
#include <windows.h>

int a = 0;
int main(int argc, char *argv[]) {
    asm("mov eax, 0xFF");
    asm("mov _a, eax");
    printf("Result of a = %d\n", a);
    getch();
    return 0;
 };

これは、このGCCコマンドラインで機能するコードです。

gcc.exe File.cpp -masm=intel -mconsole -o File.exe

それは* .exeファイルをもたらし、私の経験ではうまくいきました。

Notes:
immediate operand must be use _variable in global variabel, not local variable.
example: mov _nLength, eax NOT mov $nLength, eax or mov nLength, eax

A number in hexadecimal format must use at&t syntax, cannot use intel syntax.
example: mov eax, 0xFF -> TRUE, mov eax, 0FFh -> FALSE.

それで全部です。


私のFedoraでは機能しません:$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
d33tah

cygwinで動作します。アセンブリは.sファイルのintelとして入り、intelとして出ます。使用-o a.outする場合、.sファイルは取得されません。
Orwellophile 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.