Bagaimana Anda menggunakan gcc untuk menghasilkan kode rakitan di sintaks Intel?
151
The gcc -Spilihan akan menghasilkan kode assembly di AT & T sintaks, apakah ada cara untuk menghasilkan file dalam sintaks Intel? Atau adakah cara untuk mengkonversi antara keduanya?
Anda dapat mengonversi satu instruksi dengan mudah di shell dengan llvm-mc: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intelgivespacksswb -84(%bp,%si), %mm0
Janus Troelsen
Jawaban:
198
Sudahkah Anda mencoba ini?
gcc -S -masm=intel test.c
Belum diuji, tetapi saya menemukannya di forum ini di mana seseorang mengklaim itu bekerja untuk mereka.
Saya baru saja mencoba ini di mac dan gagal, jadi saya melihat di halaman manual saya:
-masm=dialect
Outputasm instructions using selected dialect.Supported choices
are intel or att (the default one).Darwin does not support intel.
Apakah bekerja dengan saya. Tapi saya bisa tahu cara lain, meskipun ini tidak ada hubungannya dengan menjalankan gcc. Kompilasi file kode objek yang dapat dieksekusi dan kemudian bongkar kode objek dalam sintaks Intel asm dengan objdump seperti di bawah ini:
Ini akan menghasilkan file * .exe, dan itu berhasil menurut pengalaman saya.
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
Jawaban:
Sudahkah Anda mencoba ini?
Belum diuji, tetapi saya menemukannya di forum ini di mana seseorang mengklaim itu bekerja untuk mereka.
Saya baru saja mencoba ini di mac dan gagal, jadi saya melihat di halaman manual saya:
Ini bisa bekerja pada platform Anda.
Untuk Mac OSX:
Sumber: https://stackoverflow.com/a/11957826/950427
sumber
prefix
/noprefix
(tidak yakin apakah itu penting jika Dentang mengkonsumsi perakitan).Itu
Apakah bekerja dengan saya. Tapi saya bisa tahu cara lain, meskipun ini tidak ada hubungannya dengan menjalankan gcc. Kompilasi file kode objek yang dapat dieksekusi dan kemudian bongkar kode objek dalam sintaks Intel asm dengan objdump seperti di bawah ini:
Ini mungkin bisa membantu.
sumber
Saya memiliki kode ini dalam file CPP:
Kode itu berfungsi dengan baris perintah GCC ini:
Ini akan menghasilkan file * .exe, dan itu berhasil menurut pengalaman saya.
Itu saja.
sumber
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
Anda tidak akan mendapatkan file .s.