Sayangnya saya kehilangan kode sumber saya dan saya hanya memiliki file output yang dibuat dengan gcc di linux dan saya tidak memiliki akses ke pc saya sekarang. Apakah ada cara untuk mengkonversi file output ke file sumber (di c di bawah linux)?
14
Jawaban:
Jadi Anda punya sapi, tetapi Anda secara tidak sengaja mengubahnya menjadi hamburger, dan sekarang Anda ingin sapi Anda kembali.
Maaf, itu tidak berfungsi seperti itu.
Cukup kembalikan file sumber dari cadangan Anda.
Ah, Anda tidak punya cadangan. Sayangnya, alam semesta tidak memberi Anda istirahat untuk itu.
Anda dapat mendekompilasi biner. Itu tidak akan memberi Anda kode sumber Anda, tetapi itu akan memberi Anda beberapa kode sumber dengan perilaku yang sama. Anda tidak akan mendapatkan nama-nama variabel kecuali itu biner debug. Anda tidak akan mendapatkan logika yang sama persis kecuali Anda mengkompilasi tanpa optimasi. Jelas, Anda tidak akan mendapatkan komentar.
Saya telah menggunakan Boomerang untuk mendekompilasi beberapa program, dan hasilnya lebih mudah dibaca daripada kode mesin. Saya tidak tahu apakah itu alat terbaik di luar sana. Pokoknya, jangan berharap keajaiban.
sumber
Beberapa alat umum dalam rekayasa terbalik yang dapat dieksekusi.
Dalam kebanyakan kasus yang saya lihat, kode harus ditulis ulang dari awal, dikelola sebagai program bahasa assembly, atau disusun kembali dengan menerapkan kembali permintaan perubahan ke versi yang lebih lama.
sumber
Apa yang ingin Anda lakukan disebut "dekompilasi". Ada banyak dekompiler di luar sana dan tidak praktis untuk membahas semuanya di sini.
Namun, sebagai pernyataan umum: Konversi dari sumber C ke kode mesin yang dapat dieksekusi hilang. Contohnya:
Jarang kode dikompilasi seperti ditulis. Sebagian besar kompiler hari ini akan secara drastis mengubah kode Anda untuk mengoptimalkannya. Jadi ketika Anda mendekompilasi, kompiler hanya dapat menebak seperti apa kode sumbernya, ia tidak memiliki cara untuk mengetahui apa kode Anda , karena itu hilang. Jika dekompiler bagus, kode yang Anda dapatkan setidaknya akan dapat dikompilasi kembali menjadi executable yang setara, dan kemudian Anda dapat mulai secara perlahan refactoring agar dapat dibaca. Tetapi kemungkinan besar decompiler akan menghasilkan kode spageti yang benar-benar tidak terbaca, dan akan sangat memusingkan untuk menguraikannya. Kadang-kadang, mungkin akan menjadi kurang berhasil untuk hanya menulis ulang program dari awal.
sumber