Có trình dịch ngược C ++ không? [đóng cửa]


116

Tôi có một chương trình mà tôi đã mất mã nguồn C ++. Có bất kỳ trình biên dịch C ++ tốt nào ngoài đó không?

Tôi đã chạy qua Boomerang .


objdumpcho Linux
Stypox

1
cutter.re cho gui tuyệt vời và trình dịch ngược nội trang tuyệt vời
Misiur

Câu trả lời:


80

Bạn có thể sử dụng IDA Pro bằng Hex-Rays . Bạn thường sẽ không nhận được C ++ tốt từ một tệp nhị phân trừ khi bạn đã biên dịch trong thông tin gỡ lỗi. Chuẩn bị để dành nhiều lao động thủ công đảo ngược mã.

Nếu bạn không loại bỏ các mã nhị phân, có một số hy vọng vì IDA Pro có thể tạo ra mã C-alike để bạn làm việc. Thường thì nó rất thô, ít nhất là khi tôi sử dụng nó vài năm trước.


26
Để làm rõ, IDA sẽ chỉ đưa ra cách tháo gỡ. Có một tiện ích bổ sung cho nó được gọi là Hex-Rays sẽ dịch ngược phần còn lại thành mã nguồn C / C ++, trong phạm vi có thể.
davenpcj

2
Đối với việc đọc tài liệu của tôi, tia hex chỉ xuất ra C giống như mã giả. Điều đó không làm cho việc giải mã C ++ trở nên vô ích, bạn chỉ cần biết một chút về cách các trình biên dịch chuyển đổi cấu trúc C ++.
Michael Anderson,

Để làm rõ một số nhiều hơn, Tháo là hầu hết các bạn có thể dịch ngược với Hex-Rays sẽ dịch ASM đến C ++ ASM có thể được dịch sang bất kỳ ngôn ngữ lập trình với công việc như tất cả các chương trình có thể chạy như ASM
Barkermn01

4
SNOWMAN là một trình dịch ngược c ++ miễn phí tốt
Inga

2
+1 cho Người tuyết, nhưng như những người khác đã đề cập, ngay cả một Lời chào đơn giản , Thế giới thực tế trở nên không thể đọc được sau khi được dịch ngược.
bdetweiler

25

thông tin bị loại bỏ trong quá trình biên dịch. Ngay cả khi một trình dịch ngược có thể tạo ra mã tương đương logic với các lớp và mọi thứ (nó có thể không thể), phần tự lập tài liệu đã biến mất trong mã phát hành được tối ưu hóa. Không có tên biến, không có tên quy trình, không có tên lớp - chỉ là địa chỉ.


25
"linh hồn" của chương trình đã biến mất, chỉ là một cái vỏ trống rỗng của nó cựu tự ..."
Darshan Chaudhary

21

Có, nhưng không ai trong số họ sẽ quản lý để tạo ra mã đủ đọc được để xứng đáng với nỗ lực. Bạn sẽ dành nhiều thời gian hơn khi cố gắng đọc mã nguồn được dịch ngược với các khối trình hợp dịch bên trong, hơn là viết lại ứng dụng cũ của bạn từ đầu.


6

Tôi chưa thấy bất kỳ trình dịch ngược nào tạo mã C ++. Tôi đã thấy một vài thử nghiệm thực hiện một nỗ lực hợp lý trong việc tạo mã C, nhưng chúng có xu hướng phụ thuộc vào việc so khớp các mẫu tạo mã của một trình biên dịch cụ thể (điều đó có thể đã thay đổi, đã lâu kể từ lần cuối tôi xem xét điều này ). Tất nhiên mọi thông tin tượng trưng sẽ không còn. Google cho "trình dịch ngược".


4

Tùy thuộc vào độ lớn và mức độ viết của mã gốc, nó có thể đáng để bắt đầu lại bằng ngôn ngữ yêu thích của bạn (có thể vẫn là C ++) và học hỏi từ bất kỳ lỗi nào mắc phải trong phiên bản trước. Không phải ai đó đã từng nói về việc viết một cái để vứt bỏ?

nb Rõ ràng nếu đây là một sản phẩm khổng lồ, thì nó có thể không xứng đáng với thời gian.



24
Joel là một người viết chuyên mục tuyệt vời, nhưng đôi khi sai lầm. Và sau đó có những lúc anh ấy trích dẫn sai. Giống như đây, vì câu hỏi xoay quanh việc mất mã nguồn. Bài báo Joels giải thích tại sao mã nguồn có giá trị.
MSalters 16/10/08

5
Không phải ai đó đã từng nói về việc viết một cái để vứt bỏ? Vâng, và anh ấy đã đổi ý davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] n 1975, tôi đã khuyên các lập trình viên “vứt bỏ phiên bản đầu tiên”, sau đó xây dựng phiên bản thứ hai một. Đến phiên bản kỷ niệm 20 năm, tôi nhận ra rằng lặp đi lặp lại liên tục gia tăng là một cách tiếp cận hợp lý hơn nhiều
ta.speot.is
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.