Apakah ada decompiler C ++? [Tutup]

116

Saya memiliki program di mana saya kehilangan kode sumber C ++. Apakah ada pengurai C ++ yang bagus di luar sana?

Saya sudah berlari melintasi Boomerang .

Bryan Denny
sumber
objdumpuntuk Linux
Stypox
1
cutter.re untuk gui yang hebat dan decompiler
bawaan yang

Jawaban:

80

Anda dapat menggunakan IDA Pro oleh Hex-Rays . Anda biasanya tidak akan mendapatkan C ++ yang baik dari biner kecuali Anda telah mengompilasi informasi debugging. Bersiaplah untuk menghabiskan banyak tenaga kerja manual membalikkan kode.

Jika Anda tidak menghapus binari, ada beberapa harapan karena IDA Pro dapat menghasilkan kode mirip C untuk Anda gunakan. Biasanya ini sangat kasar, setidaknya saat saya menggunakannya beberapa tahun yang lalu.

David Holm
sumber
26
Untuk memperjelas, IDA hanya akan memberikan pembongkaran. Ada add-on untuk itu yang disebut Hex-Rays yang akan mendekompilasi sisa jalan ke sumber C / C ++, sejauh itu memungkinkan.
davenpcj
2
Untuk membaca dokumen saya, sinar-hex hanya menghasilkan C seperti kode semu. Bukan berarti tidak berguna untuk mendekompilasi C ++, Anda hanya perlu tahu sedikit tentang bagaimana compiler mengubah struktur C ++.
Michael Anderson
Untuk Memperjelas Beberapa lagi, Disassembly adalah yang paling dapat Anda dekompilasi dengan Hex-Rays akan menerjemahkan ASM ke C ++ ASM dapat diterjemahkan ke bahasa pemrograman apa pun dengan berfungsi karena semua program dapat berjalan sebagai ASM
Barkermn01
4
SNOWMAN adalah decompiler c ++ gratis yang bagus
Inga
2
1 untuk Manusia Salju, tetapi seperti yang disebutkan orang lain, bahkan Hello sederhana , Dunia praktis tidak dapat dibaca setelah diuraikan.
bdetweiler
25

informasi dibuang dalam proses kompilasi. Bahkan jika dekompiler dapat menghasilkan kode logis yang setara dengan kelas dan semuanya (mungkin tidak bisa), bagian yang mendokumentasikan sendiri hilang dalam kode rilis yang dioptimalkan. Tidak ada nama variabel, tidak ada nama rutin, tidak ada nama kelas - hanya alamat.

Dustin Getz
sumber
25
"jiwa" dari program telah hilang, hanya cangkang kosong dari dirinya yang dulu ... "
Darshan Chaudhary
21

Ya, tetapi tidak satupun dari mereka akan berhasil menghasilkan kode yang cukup dapat dibaca sepadan dengan usaha. Anda akan menghabiskan lebih banyak waktu untuk mencoba membaca sumber yang didekompilasi dengan blok assembler di dalamnya, daripada menulis ulang aplikasi lama Anda dari awal.

m_pGladiator
sumber
6

Saya belum melihat dekompiler yang menghasilkan kode C ++. Saya telah melihat beberapa percobaan yang membuat upaya yang masuk akal untuk menghasilkan kode C, tetapi mereka cenderung bergantung pada pencocokan pola pembuatan kode dari kompiler tertentu (yang mungkin telah berubah, sudah lama sejak saya terakhir melihat ini ). Tentu saja semua informasi simbolis akan hilang. Google untuk "decompiler".

Ferruccio
sumber
4

Bergantung pada seberapa besar dan seberapa baik kode aslinya ditulis, mungkin ada baiknya memulai lagi dalam bahasa favorit Anda (yang mungkin masih C ++) dan belajar dari kesalahan apa pun yang dibuat pada versi terakhir. Bukankah seseorang pernah berkata tentang menulis satu untuk dibuang?

nb Jelas jika ini adalah produk besar, maka mungkin tidak sepadan dengan waktu.

harriyott
sumber
24
Joel adalah kolumnis yang hebat, tetapi terkadang salah. Dan ada kalanya dia salah mengutip. Seperti di sini, karena pertanyaannya berpusat pada hilangnya kode sumber. Artikel Joels menjelaskan mengapa kode sumber itu berharga.
MSalters
5
Bukankah seseorang pernah berkata tentang menulis satu untuk dibuang? Ya, dan dia berubah pikiran davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] pada tahun 1975, saya menasihati pemrogram untuk "membuang versi pertama," lalu membuat yang kedua satu. Pada edisi ulang tahun ke-20, saya menyadari bahwa iterasi inkremental konstan adalah pendekatan yang jauh lebih sehat
ta.speot.is