Bagaimana saya bisa melihat kode perakitan untuk program C ++?
Apa alat populer untuk melakukan ini?
Bagaimana saya bisa melihat kode perakitan untuk program C ++?
Apa alat populer untuk melakukan ini?
Jawaban:
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
.
Jika Anda telah mengompilasi biner,
objdump -d a.out
di UNIX (juga berfungsi untuk cygwin),dumpbin /DISASM foo.exe
di Windows.Debuggers juga bisa menunjukkan disassebly.
disas
perintah di GDB,Di GCC / G ++, kompilasi dengan -S
. Itu akan menampilkan something.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
.
-fverbose-asm
opsi
Di Visual Studio ;
Situs ini saat ini berfungsi untuk saya (2017): https://godbolt.org/
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.
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.
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>
.
Sebagian besar kompiler memiliki opsi untuk menampilkan daftar perakitan. Misalnya dengan VisualStudio Anda dapat menggunakan sesuatu seperti:
cl.exe /FAfile.asm file.c
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.
PE Explorer Disassembler untuk file PE 32-bit. IDA untuk orang lain.
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.
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.
Jika Anda pengguna Eclipse, Anda dapat menggunakan tampilan Disassembly .
Tampilan Disassembly menunjukkan program yang dimuat sebagai instruksi assembler dicampur dengan kode sumber untuk perbandingan. Baris yang sedang dieksekusi ditunjukkan oleh penanda panah dan disorot dalam tampilan. Anda dapat melakukan tugas-tugas berikut dalam tampilan Disassembly:
- Tetapkan breakpoint di awal instruksi assembler
- Aktifkan dan nonaktifkan breakpoints dan atur propertinya
- Ikuti instruksi pembongkaran program Anda
- Beralih ke instruksi spesifik dalam program
Alt +8