Jak używać gcc do generowania kodu asemblera w składni Intela?
151
gcc -SOpcja będzie generować kod montaż w składni AT & T, czy istnieje sposób, aby wygenerować pliki w składni Intel? A może istnieje sposób na nawrócenie się między nimi?
możesz łatwo konwertować pojedyncze instrukcje w powłoce za pomocą llvm-mc: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intelgivespacksswb -84(%bp,%si), %mm0
Janus Troelsen
Odpowiedzi:
198
Czy próbowałeś tego?
gcc -S -masm=intel test.c
Nietestowane, ale znalazłem to na tym forum, gdzie ktoś twierdził, że działa dla niego.
Właśnie wypróbowałem to na komputerze Mac i nie udało mi się, więc zajrzałem na stronę podręcznika:
-masm=dialect
Outputasm instructions using selected dialect.Supported choices
are intel or att (the default one).Darwin does not support intel.
Działa ze mną. Ale mogę powiedzieć inaczej, chociaż nie ma to nic wspólnego z uruchomieniem gcc. Skompiluj plik wykonywalny lub plik kodu obiektowego, a następnie zdemontuj kod wynikowy w składni Intel asm z objdump, jak poniżej:
Wynikiem będzie plik * .exe, który z mojego doświadczenia zadziałał.
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.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
givespacksswb -84(%bp,%si), %mm0
Odpowiedzi:
Czy próbowałeś tego?
Nietestowane, ale znalazłem to na tym forum, gdzie ktoś twierdził, że działa dla niego.
Właśnie wypróbowałem to na komputerze Mac i nie udało mi się, więc zajrzałem na stronę podręcznika:
Może działać na Twojej platformie.
W przypadku systemu Mac OSX:
Źródło: https://stackoverflow.com/a/11957826/950427
źródło
prefix
/noprefix
(nie jestem pewien, czy ma znaczenie, jeśli Clang zużywa zespół).Plik
Działa ze mną. Ale mogę powiedzieć inaczej, chociaż nie ma to nic wspólnego z uruchomieniem gcc. Skompiluj plik wykonywalny lub plik kodu obiektowego, a następnie zdemontuj kod wynikowy w składni Intel asm z objdump, jak poniżej:
To może pomóc.
źródło
Mam ten kod w pliku CPP:
Ten kod działał z tym wierszem poleceń GCC:
Wynikiem będzie plik * .exe, który z mojego doświadczenia zadziałał.
To wszystko.
źródło
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
, nie otrzymasz pliku .s.