2011-12-09 11 views
8

Tôi có trình biên dịch biên dịch sang bytecode không có giấy tờ cho một máy ảo không có giấy tờ. Tôi muốn để có thể biên dịch cho cùng một máy ảo, nhưng tôi không chắc chắn làm thế nào để đi về việc này. Làm thế nào để tôi học cách làm điều này? Có ai đã xuất bản nhật ký hoặc nhật ký của họ làm điều tương tự không?Làm thế nào để đảo ngược thiết kế trình biên dịch?

EDIT: Tôi đã bỏ qua đề cập đến đây là RobotC 3.0 compiler cho LEGO Mindstorms. Trước khi bất cứ ai đề xuất cái gì khác, tôi biết tất cả về nXc và các dự án tương tự, và họ không phải là một lựa chọn vì tôi đang giúp một nhóm robot FTC FIRST, chỉ được phép sử dụng RobotC hoặc LabView.

Đối với những ai đề xuất rằng tôi nhắm mục tiêu ngôn ngữ của trình biên dịch, tôi chưa làm điều đó vì tôi hy vọng rằng một số tính năng của phần cứng không bị trình biên dịch tiếp xúc sẽ được hiển thị bởi chương trình cơ sở và bởi vì tôi muốn quản lý bộ nhớ tùy chỉnh nhiều hơn cho phép của RobotC.

+3

Một trình biên dịch chỉ là một chương trình và có thể được gỡ lỗi như vậy. – karlphillip

+3

Điều này có thể mất vài tháng. Làm thế nào về việc có trình biên dịch của bạn nhắm mục tiêu ngôn ngữ đầu vào của trình biên dịch bạn đã có? –

Trả lời

5

Độ nghiêng của tôi sẽ là để tháo rời trình biên dịch. Nếu nó được viết bằng .NET (C#, VB.NET, v.v.) hoặc Java, có các trình giải mã sẽ cung cấp cho bạn một cái gì đó rất gần mã nguồn ban đầu (trừ khi nó bị xáo trộn). Ngay cả khi nó là C++ và bạn chỉ có thể nhận được lắp ráp, các cuộc gọi thư viện có thể chỉ cho bạn đi đúng hướng.

Nếu bytecode là nhỏ, tùy chọn khác là để bắt đầu với một chương trình "Hello world", biên dịch nó, làm cho một nhỏ thay đổi, biên dịch nó, sau đó phân biệt hai kết quả bytecode.

Nếu bạn có thể đăng thêm một số thông tin về trình biên dịch/máy ảo cụ thể, có lẽ người khác có kinh nghiệm với điều đó.

Chỉnh sửa: Cho rằng đây là sản phẩm thương mại, có khả năng kỹ thuật đảo ngược thông qua quá trình giải mã sẽ vi phạm thỏa thuận cấp phép của nó. Làm lại bytecode có thể không (tôi không có luật sư). Nghe có vẻ như bạn đang ở trong một Catch-22, mặc dù. Nếu bạn thành công, bạn không sử dụng RobotC hoặc LabView. Nếu cuộc thi chỉ quy định rằng mã phải chạy trên máy ảo RobotC, nó có thể là doable. Hãy nhớ rằng, mặc dù, một khi bạn RE bytecode bạn vẫn phải viết trình biên dịch của riêng bạn trước khi bất cứ ai có thể viết bất kỳ phần mềm. Nếu bạn đang làm điều này cho vui, tuyệt vời; nếu không nó có thể không khả thi.

Tôi đã tìm thấy một liên kết thú vị dựa trên luận án Thạc sĩ: Software Reverse Engineering

+0

Điểm tốt - Tôi đang mơ hồ không cần thiết. Đã cập nhật câu hỏi. – Silas

+1

Vâng, chúng tôi chỉ được yêu cầu sử dụng phần mềm (VM), không phải trình biên dịch thực tế. Tôi là một người PL, do đó, trình biên dịch giống như bản chất thứ hai với tôi, miễn là tôi có một số loại spec về bytecode. – Silas

0

Có vẻ như một tấn các nguồn lực mà bạn có thể nhìn vào đây:

http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0

+0

Tôi không tin rằng bạn hiểu vấn đề của tôi - không có tài nguyên nào được áp dụng vì RobotC sử dụng phần mềm tùy chỉnh và tôi bị giới hạn việc sử dụng RobotC (LabView thực sự không phải là tùy chọn ở đây). – Silas

+0

Thật không may "RobotC ... yêu cầu phần mềm tùy chỉnh để chạy." BTW đề xuất tuyệt vời về nhắm mục tiêu ngôn ngữ nhập - Tôi khuyên bạn nên chuyển nhận xét đó vào câu trả lời của bạn. Mặc dù điều đó sẽ không giúp OP nó có thể giúp đỡ người khác trong một tình huống tương tự. – TrueWill