2010-12-29 34 views
29

Từ một tệp được biên dịch, tôi có thể xem trình biên dịch nào đã được sử dụng để tạo tệp không?Làm thế nào để xác định trình biên dịch nào đã được sử dụng để biên dịch một tệp thực thi?

+9

http://superuser.com/questions/80605/detect-compiler-used-for-exe-file –

+1

Bạn có ý nghĩa gì với tệp được biên dịch? Một tệp đối tượng hoặc tệp thực thi? – kgiannakakis

+0

@ John Bartholomew: hãy cẩn thận để đưa câu trả lời này lên? –

Trả lời

7

Ngoài ra còn có tiện ích 'chuỗi' cũ tốt. Dumps tất cả các chuỗi tìm kiếm ascii-ish nó tìm thấy trong nhị phân. Các trình biên dịch khác nhau nhúng các lượng thông tin khác nhau vào các tệp nhị phân mà chúng tạo ra, nhưng nhiều người sẽ thực sự bao gồm các chuỗi xác định rõ ràng.

+0

đôi khi bạn có thể trực tiếp nhận được tên trình biên dịch và thậm chí cả số phiên bản theo cách này, w/caveat mà bạn cần phải lội qua rất nhiều thứ khác. ngay cả khi trình biên dịch không phải là loại đủ để ID chính nó, bạn có thể có thể học cách nhận ra các chuỗi trong thời gian chạy. grep đầu ra từ chuỗi cho những thứ như gcc để tăng tốc mọi thứ. – JustJeff

3

Trong một số trường hợp, bạn có thể chạy ldd trên tệp nhị phân và tìm ra thư viện chuẩn nào được liên kết với nó. Ví dụ trên Solaris gcc vs Sun CC vs bất cứ điều gì.

Đối với mã C++, bạn cũng có thể kết xuất một số biểu tượng, tìm tên hàm bị xáo trộn, và sau đó tìm ra trình tạo nhân khẩu học nào tạo đúng tên gốc.

+0

Tên mangling là không đủ để phân biệt nó, icc sẽ chỉ mangle nó như gcc ví dụ. – ismail

2

Hãy thử, IDA Pro xác định thư viện và công cụ được sử dụng để tạo tệp thi hành.

5

Nhiều trình biên dịch/liên kết chèn một phần .comment vào tệp đầu ra xác định chúng. Ngoài ra còn có một số hành vi tinh vi hơn bạn có thể tạo ra dấu vân tay trình biên dịch tắt, nhưng tôi biết không có công cụ hiện có cho việc này.

Nếu bạn có nguồn, giải pháp đơn giản nhất là thử biên dịch với từng trình biên dịch được đề cập cho đến khi bạn nhận được một tệp nhị phân khớp với byte-cho-byte (hoặc thậm chí gần).

+2

Và phần '.note. *' Được thêm vào. – user502515

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