2010-02-27 28 views
12

Có cách nào để lấy mã nguồn bằng cách sử dụng tệp đối tượng trong C không?Lấy nguồn từ tệp đối tượng

Ví dụ tôi có một mã nguồn simple.c

cc simple.c

Bây giờ tôi có a.out (tập tin đối tượng). Bởi a.out này cho dù tôi có thể nhận được nguồn?

mã của simple.c

+0

có thể trùng lặp của: http://reverseengineering.stackexchange.com/ :-) –

Trả lời

8

Có nhiều công cụ hữu ích để truy xuất thông tin từ tệp thực thi của bạn. Không ai trong số họ có thể cung cấp cho bạn trở lại mã nguồn ban đầu (như một số người dùng khác chỉ ra, nó không thể cho C), nhưng bạn có thể thử một số công cụ kỹ thuật đảo ngược. một ưa thích của tôi là:

  • objdump (một phần của "binutils" gói)
  • HTE (gói debian nó như là "ht")

Với người đầu tiên bạn thực sự có thể nhận được tất cả các các biểu tượng đã xuất và mã thực thi tương đối của chúng về mặt lắp ráp (rõ ràng điều này chỉ đúng với các phần .text). Mục thứ hai là nhằm làm việc với các kiến ​​trúc intel, nhưng bạn sẽ có thể phân tích mọi tập tin thực thi và nhận thông tin về các phần và biểu tượng của ELF.

2

số

Với kỹ thuật đảo ngược (đọc tháo gỡ) người ta có thể tái tạo lại logic, nhưng tên biến, ý kiến, vv thường sẽ bị mất .

35

Không. Biến bò thành bánh hamburger khá dễ dàng. Biến hamburger thành một con bò sống, hơi khó khăn hơn.

+6

LoL, biến hamburger thành một con bò sống .. –

+0

Có lẽ vì tôi đã trực giác trước khi nhìn lên, câu trả lời này thực sự hữu ích! – chet

+2

Trình biên dịch Hambrger GCC đã được phát hành ... – TheDoctor

1

Từ cho chương trình bạn đang tìm kiếm là "disassembler" (chuyển ngôn ngữ máy thành ngôn ngữ lắp ráp) và "decompiler" (chuyển ngôn ngữ assembly thành C, như được giải thích bởi Dacav, nó còn hơn thế nữa khó khăn và kết quả là không bao giờ thỏa mãn).

Nhưng sử dụng công cụ tìm kiếm trên web có những từ này có thể mang lại kết quả.

0

Nếu bạn đang sử dụng Linux, sử dụng gdb

$ gdb a.out

(gdb) list

Các vấn đề liên quan