2009-03-06 52 views
18

Với một tệp thực thi được biên dịch từ C để chạy trên Solaris, có thể xác định trình biên dịch nào được sử dụng để biên dịch tệp thực thi không hoàn chỉnh có liên quan không?Bạn có thể tìm ra trình biên dịch nào được sử dụng để biên dịch chương trình không?

Tôi không thể thấy bất cứ điều gì khi sử dụng chuỗi hoặc lệnh tệp và ma thuật dường như không chứa bất kỳ điều gì cụ thể.

Trình biên dịch có thường đặt dấu vân tay trong tệp đầu ra có thể thực thi của chúng không?

cổ vũ,

+0

Câu hỏi hay. Tôi giả sử có sự khác biệt (ngay cả giữa các phiên bản và cài đặt trình biên dịch) nhưng phát hiện trình biên dịch sẽ không phải là một nhiệm vụ tầm thường. –

+0

Câu hỏi thú vị. Bạn đang nghĩ về hệ điều hành nào? –

+0

Nó cũng phụ thuộc vào số tiền bạn phải làm việc. Ví dụ gcc tạo ra các tệp o khác với cc. Nếu bạn có chương trình tĩnh hoặc chương trình có thể tải động, bạn cũng có thể xem thư viện nào được sử dụng. Nói cách khác, dấu vân tay của bạn là logic không phải là chuỗi. –

Trả lời

2

Nếu thực thi không được tước, hãy thử/usr/CCS/bin mcs-p này sẽ thường hiển thị các trình biên dịch, liên kết và tất cả các tập tin tiêu đề sử dụng

6

Có IDA là điều tuyệt vời cho việc này. Nó sử dụng một công nghệ gọi là FLIRT.

0

Visual Studio và GCC thường theo các thói quen khởi động khác nhau (gọi chính). Đó có thể là một gợi ý. Tôi không biết về những người khác mặc dù. Đối với dlls, không thể nghĩ ra một cái gì đó tương tự ra khỏi đỉnh đầu của tôi.

4

PEID sẽ thực hiện thủ thuật. Nó thường hoạt động rất tốt. Rõ ràng PEID là một công cụ cửa sổ nhưng nó không quan trọng và sẽ hiển thị cho bạn trình biên dịch (đôi khi ngay cả thông tin phiên bản cụ thể)

+1

Chỉ hoạt động với các tệp PE. Solaris là ELF hoặc có thể là a.out – MSalters

+0

IDA hoạt động đối với elf mặt trời. Xem bài đăng của tôi. –

+0

ops bỏ lỡ điều đó, điểm tốt. –

2

Xây dựng các ứng dụng thử nghiệm nhỏ với mỗi trình biên dịch bạn đang cố gắng xác định. Sau đó xem kết quả trong trình chỉnh sửa hex và cố gắng tìm các mẫu. Nó có thể trở nên thực sự rõ ràng - ví dụ: "Rich" signatures từ trình liên kết của Microsoft.

0

Trình biên dịch thường thêm "chữ ký" cá nhân của riêng mình làm văn bản rõ ràng trong các tệp được biên dịch. Bạn có thể sử dụng một công cụ như là các chuỗi để tạo ra bản rõ.

+0

@ Ignacio, tôi đã cố gắng nhưng không có gì thực sự nhảy ra ngoài với tôi. –

1

Không tước:

$ cc hello.c -O

$ file a.out

a.out: ELF 32-bit MSB SPARC32PLUS thực thi Phiên bản 1, V8 + Yêu cầu, tự động liên kết, chưa bóc

$ strings-a.out | grep cc

/opt/solarisstudio12.3/prod/bin/cc -O hello.c

$ dwarfdump -i a.out | grep compile_o

DW_AT_SUN_compile_options Xa; O; R = CN C 5.12 SunOS_sparc Vá 148917-07 2013/10/18; backend; raw; cd;

Stripped:

$ dải a.out

$ file a.out

a.out: ELF 32-bit MSB SPARC32PLUS thực thi Phiên bản 1, V8 + Yêu cầu, liên kết động, tước

$ strings-a a.ra | grep cc

(không)

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