2010-04-12 105 views
8

tôi đang tìm kiếm mã nguồn của một trình biên dịch có khả năng tạo ra các chương trình Win32 từ một chương trình đầu vào trong một ngôn ngữ lập trình (Nó không quan trọng mà, có lẽ đơn giản càng tốt)Ví dụ trình biên dịch

Tuy nhiên, tôi có thể 't tìm thấy bất cứ điều gì đúng cho tôi và trình biên dịch lớn như GCC làm cho tôi vô cùng bối rối vì họ có rất nhiều tính năng mà tôi không biết bắt đầu từ đâu.

  • Có một trình biên dịch mã hóa Win32 nguồn mở cho một số ngôn ngữ lập trình ngoài đó tôi có thể xem không?
+3

Xem câu hỏi này: http://stackoverflow.com/ question/1669/learning-to-write-a-compiler –

+0

Đó là danh sách sách. – saf

+0

Thực ra tôi đang phát triển một trình biên dịch cho ngôn ngữ của tôi cho nền tảng Win32. Tôi khuyên bạn nên đọc trên tệp tiêu đề PE và lấy một bản sao của tài liệu tham khảo Intel x86 để triển khai mã opcodes. Sau đó, bạn nên tạo một số lớp "abstracting" thực thi và sử dụng mô hình này để tạo các dự đoán của trạng thái của bộ xử lý để tạo ra một assembly hợp lệ. – Pindatjuh

Trả lời

4

http://en.wikipedia.org/wiki/List_of_compilers chọn những người có Giấy phép gõ "mã nguồn mở"

+0

Đó là loại trình biên dịch không giúp tôi. Làm thế nào để bạn mong đợi tôi để đào thông qua mười nghìn dòng mã chỉ để tìm hiểu những điều cơ bản? – saf

+0

Bạn có nghĩ rằng có các trình biên dịch với số lượng mã nhỏ hơn 10 giây? tôi có cảm giác rằng không có gì. – Andrey

+0

Có rất nhiều trình biên dịch như vậy. Nếu bạn lấy đi cú pháp phức tạp và tối ưu hóa, trình biên dịch thực sự không phức tạp. Cấp, một trình biên dịch như vậy không phải là hữu ích cho công việc mã hóa thực tế, nhưng lý tưởng cho việc học những điều cơ bản về cách trình biên dịch hoạt động. –

0

gas có thể biến ngôn ngữ lắp ráp thành mã đối tượng, trong đó ld sau đó có thể liên kết với các runtimes thích hợp để tạo ra một chương trình.

+3

Cả hai đều không phải là trình biên dịch. – WhirlWind

+0

Đã bỏ phiếu trong thỏa thuận với WhirlWind. – Kawa

+0

Assembler là một trình biên dịch, theo định nghĩa. Được bỏ phiếu trong sự bất đồng với những người đi xuống. Và có, nếu bạn đang triển khai trình biên dịch, bạn không nên bị làm phiền với định dạng tệp PE - nó không phải là công việc của trình biên dịch, đó là công việc của người liên kết. –

2

Tôi khuyên bạn nên chọn một sách giáo khoa trình biên dịch. Chúng giải thích tất cả các thành phần cần thiết của trình biên dịch và thường phát triển trình biên dịch từ đầu đến cuối.

Tôi sở hữu một bản sao của Modern Compiler Implementation in Java từ khóa học trình biên dịch của tôi và tôi rất hài lòng với nó.

0

Nếu mục tiêu của bạn là tìm hiểu cách trình biên dịch hoạt động và/hoặc cách mã hóa, bạn thực sự nên đọc một cuốn sách về chủ đề này. Tuy nhiên, khi tìm kiếm các mẫu mã nguồn, hãy thử các mẫu trình biên dịch Pascal như this one.

Pascal có ngữ pháp hơi đơn giản và được triển khai trong nhiều sách.

0

Ngôn ngữ lập trình đơn giản nhất là Assembly, x86-assembly là chính xác. Công cụ lắp ráp nổi tiếng nhất, NASM, là nguồn mở; bạn có thể kiểm tra nguồn của nó tại địa chỉ:

http://repo.or.cz/w/nasm.git

NASM có vĩ mô của được thực sự "biên soạn" vào báo cáo lắp ráp. Mặc dù nó không phải là một ngôn ngữ hoàn toàn chính thức, nhưng nó tập trung vào những điều cơ bản.

0

Tôi khuyên bạn nên tìm nguồn trình biên dịch Pascal, C hoặc SmallC cho MS-DOS (16 bit). Đặc biệt nếu chúng tự giới hạn ở chế độ thực 16-bit phẳng (< = chế độ bộ nhớ 64KB), chúng sẽ khá đơn giản.

Hỗ trợ cho chế độ thực được phân đoạn bổ sung rất nhiều tính phức tạp tốt nhất nên tránh và không liên quan đến chương trình chế độ bảo vệ phẳng 32 bit (lập trình 32 bit không phải là hệ điều hành).

Đối với bộ xử lý không phải x86, chương trình mẫu cho chuỗi bài viết của Jack Crenshaw "Let's Build a Compiler" là trình biên dịch cú pháp giống Pascal nhắm mục tiêu bộ xử lý Motorola MC68000 16/32-bit. Ngoài ra còn có Marcel Hendrix viết bằng Forth trên win32 version of the series.

Ngoài ra còn có TCC - Trình biên dịch Tiny C, hỗ trợ đầu ra PE-i386 (ví dụ: Win32).

Mặc dù nếu bạn không thể đọc toàn bộ liên kết SO mà Firas Assaad đưa ra trong các nhận xét, chứa tất cả nhưng một trong các liên kết này, tôi tin rằng bạn sẽ tìm mã nguồn của trình biên dịch một cách khủng khiếp .

2

Bạn đang cố gắng để hiểu làm thế nào để xây dựng một trình biên dịch hoặc bạn đang cố gắng tìm hiểu những gì một thực thi Win32 trông giống như nội bộ?

Nếu trước đây, đọc một cuốn sách về cách tạo trình biên dịch sẽ hiệu quả hơn là cố gắng đảo ngược mã nguồn của kỹ sư. Trình biên dịch không giống như bất cứ thứ gì bạn từng thấy và nó thực sự giúp một tác giả hướng dẫn bạn qua các nguyên tắc và các kỹ thuật và công cụ phổ biến được sử dụng. Nó cũng đáng để chỉ ra rằng các trình biên dịch được xây dựng theo các giai đoạn và nó chỉ hướng tới phần cuối của quá trình triển khai, bạn cần phải có bất kỳ kiến ​​thức nào về CPU và hệ điều hành mà bạn đang nhắm mục tiêu. Nếu bạn chưa quen với việc xây dựng trình biên dịch thì bạn có rất nhiều điều để tìm hiểu về trước khi bạn sẽ đến giai đoạn đó.

Tuy nhiên, nếu bạn muốn hiểu định dạng tệp thực thi Win32 thì bạn cần hiểu mã lắp ráp x86 (hoặc x64) và định dạng tệp thực thi di động (được sử dụng bởi Windows để thực thi). Để giới thiệu về mã lắp ráp x86, tôi khuyên bạn nên sử dụng "PC Assembly Language" tuyệt vời của Tiến sĩ Paul Carter miễn phí eBook http://www.drpaulcarter.com/pcasm/ và cho PE tôi bắt đầu tại đây http://msdn.microsoft.com/en-us/magazine/cc301805.aspxhttp://msdn.microsoft.com/en-us/magazine/cc301808.aspx

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