Intel sözdiziminde montaj kodu oluşturmak için gcc'yi nasıl kullanırsınız?


151

gcc -SAT & T sözdiziminde assembly kodu üretecektir seçenek Intel sözdiziminde dosyalar oluşturmak için bir yol var? Yoksa ikisi arasında dönüşümün bir yolu var mı?


5
llvm-mc ile tek talimatları kolayca dönüştürebilirsiniz: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intelverirpacksswb -84(%bp,%si), %mm0
Janus Troelsen

Yanıtlar:


198

Bunu denedin mi?

gcc -S -masm=intel test.c

Test edilmedi, ancak birisinin kendileri için çalıştığını iddia ettiği bu forumda buldum .

Mac'te bunu denedim ve başarısız oldu, bu yüzden adam sayfama baktım:

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

Platformunuzda çalışabilir.

Mac OSX için:

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

Kaynak: https://stackoverflow.com/a/11957826/950427


Yanlış dosya adı att2intel.sed'e rağmen, bu sed betiği Intel'den ATT'ye başka bir şekilde dönüşür.
Jonathon Reinhart

Mac için çözümü olan var mı?
Joshua Cheek

Clang şu anda Intel sözdizimini kullanamıyor. Bkz. LLVM Hata 24232: [X86] Satır içi montaj işlenenleri .intel_syntax ile çalışmaz . Ayrıca, Clang yok sayar prefix/ noprefix(Clang montajı tüketirse önemli olup olmadığından emin değildir).
jww

17

The

gcc -S -masm=intel test.c

Benimle çalışıyor. Ama başka bir yol söyleyebilirim, ancak bu gcc çalışan ile ilgisi yoktur. Yürütülebilir dosyayı veya nesne kodu dosyasını derleyin ve Intel asm sözdizimindeki nesne kodunu objdump ile aşağıdaki gibi sökün:

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

Bu yardımcı olabilir.


3
objdump -d -M intel ile aynı
David 天宇 Wong

5

CPP dosyasında bu kodu var:

#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;
 };

Bu kod bu GCC komut satırı ile çalıştı:

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

Bu sonuç * .exe dosyası olacak ve benim deneyimim çalıştı.

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.

Bu kadar.


$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
Fedora'mda çalışmıyor

Cygwin'de çalışıyor. Derleme intel olarak girer, .s dosyasında intel olarak çıkar. Eğer kullanırsanız -o a.out.s dosyası alamazsınız.
Orwellophile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.