Bagaimana saya bisa melihat kode perakitan untuk program C ++?
Apa alat populer untuk melakukan ini?
c++
assembly
disassembly
Kutu buku
sumber
sumber
Alt +8
Jawaban:
Tanyakan pada kompiler
Jika Anda membuat program sendiri, Anda dapat meminta kompiler Anda untuk mengeluarkan sumber perakitan. Untuk sebagian besar kompiler UNIX gunakan
-S
sakelar.Jika Anda menggunakan GNU assembler, kompilasi dengan
-g -Wa,-alh
akan memberikan sumber dan perakitan yang dicampurkan di stdout (-Wa
meminta driver kompiler untuk memberikan opsi kepada assembler,-al
mengaktifkan daftar perakitan, dan-ah
menambahkan daftar "sumber tingkat tinggi"):g++ -g -c -Wa,-alh foo.cc
Untuk Visual Studio, gunakan
/FAsc
.Mengintip biner
Jika Anda telah mengompilasi biner,
objdump -d a.out
di UNIX (juga berfungsi untuk cygwin),dumpbin /DISASM foo.exe
di Windows.Gunakan debugger Anda
Debuggers juga bisa menunjukkan disassebly.
disas
perintah di GDB,sumber
Di GCC / G ++, kompilasi dengan
-S
. Itu akan menampilkansomething.s
file dengan kode rakitan.Sunting: Jika Anda ingin output dalam sintaks Intel (yang IMO, jauh lebih mudah dibaca, dan sebagian besar tutorial perakitan menggunakannya), kompilasi dengan
-masm=intel
.sumber
-fverbose-asm
opsiDi Visual Studio ;
sumber
Untuk gcc / g ++
Ini akan menghasilkan prog.s dengan beberapa komentar pada variabel yang digunakan di setiap baris asm:
sumber
Situs ini saat ini berfungsi untuk saya (2017): https://godbolt.org/
sumber
Banyak orang sudah mengatakan bagaimana cara memancarkan kode perakitan dengan kompiler yang diberikan. Solusi lain adalah mengkompilasi file objek dan membuangnya dengan alat seperti objdump , readelf (di Unix) atau DUMPBIN ( tautan ) (di Windows). Anda juga dapat membuang yang dapat dieksekusi, tetapi akan lebih sulit untuk membaca hasilnya.
Ini memiliki keuntungan bekerja dengan cara yang sama dengan kompiler apa pun.
sumber
Apapun debugger yang Anda gunakan harus memiliki tampilan perakitan (Visual Studio, Borland IDE, gdb, dll.). Jika Anda tidak menggunakan debugger dan Anda hanya ingin melihat perakitan apa yang ada dalam suatu program, Anda dapat menggunakan disassembler atau, jalankan program dan lampirkan dengan debugger dan lakukan dump dari sana. Lihat referensi untuk disassembler untuk informasi tentang opsi.
sumber
Seperti orang lain sebutkan, debugger platform Anda adalah titik awal yang baik. Untuk penipu dari semua debugger dan disassembler, lihat IDA Pro.
Pada platform Unix / Linux (termasuk Cygwin) Anda dapat menggunakan
objdump --disassemble <executable>
.sumber
Sebagian besar kompiler memiliki opsi untuk menampilkan daftar perakitan. Misalnya dengan VisualStudio Anda dapat menggunakan sesuatu seperti:
Untuk keterbacaan terbaik, sebagian besar debugger akan menawarkan pandangan yang interleaves pembongkaran dengan sumber asli, sehingga Anda dapat membandingkan kode Anda dengan baris output kompiler demi baris.
sumber
PE Explorer Disassembler untuk file PE 32-bit. IDA untuk orang lain.
sumber
Anda juga dapat mencoba situs ini: http://assembly.ynh.io/
Di sana, Anda dapat menempelkan kode C atau C ++ dan menekan tombol biru untuk melihat versi yang setara dengan perakitan.
sumber
Di Visual Studio Anda bisa membuat daftar assembler untuk proyek C ++.
Buka properti proyek, lalu ke C ++ / Output File dan atur pengaturan Assembler Output dan lokasi daftar ASM ke nama file.
sumber
Pada Intel Mac OS X 10.8 (Mountain Lion)
-masm=intel
arahan tidak berfungsi. Namun, jika Anda menginstal Xcode , seharusnya sudah menginstal alat bernama 'otool':Anda harus memberikan kode objek yang dikompilasi sebagai parameter.
sumber
Jika Anda pengguna Eclipse, Anda dapat menggunakan tampilan Disassembly .
sumber