Как мне перепроектировать компилятор? - PullRequest
8 голосов
/ 09 декабря 2011

У меня есть компилятор, который компилируется в недокументированный байт-код для недокументированной виртуальной машины. Я хотел бы иметь возможность компилировать на той же виртуальной машине, но я не уверен, как это сделать. Как мне научиться это делать? Кто-нибудь опубликовал журнал или журнал о том, что они делают то же самое?

EDIT : я не упомянул, что это компилятор RobotC 3.0 для LEGO Mindstorms. Прежде чем кто-либо предложит что-то еще, я знаю все о nXc и подобных проектах, и они не подходят, поскольку я помогаю команде роботов FIRST FTC, которой разрешено использовать только RobotC или LabView.

Что касается тех из вас, кто предположил, что я нацеливаюсь на язык компилятора, я этого еще не сделал, потому что я надеюсь, что определенные функции аппаратного обеспечения, которые не раскрыты компилятором, будут обнаружены прошивкой, и потому что я хочу сделать больше пользовательского управления памятью, чем разрешено RobotC.

Ответы [ 2 ]

5 голосов
/ 09 декабря 2011

Я бы хотел разобрать компилятор.Если он написан на .NET (C #, VB.NET и т. Д.) Или Java, существуют декомпиляторы, которые дадут вам что-то очень близкое к исходному исходному коду (если оно не запутано).Даже если это C ++ и вы можете получить только сборку, вызовы библиотеки могут указать вам правильное направление.

Если байт-код мал, другойможно запустить программу «Hello world», скомпилировать ее, внести небольшое изменение, скомпилировать ее, а затем передать результаты двух байт-кода.

Если вы можете опубликовать дополнительную информацию о конкретном компиляторе / ВМ,возможно, кто-то еще имеет опыт работы с этим.

Редактировать: Учитывая, что это коммерческий продукт, вполне вероятно, что обратный инжиниринг его путем декомпиляции нарушит его лицензионное соглашение.RE'ing байт-код не может (я не юрист).Похоже, вы в Catch-22.Если вам это удастся, вы не используете RobotC или LabView.Если в конкурсе указано только, что код должен выполняться на виртуальной машине RobotC, это может быть выполнимо.Помните, однако, что как только вы получите байт-код, вам все равно придется написать свой собственный компилятор, прежде чем кто-либо сможет написать какое-либо программное обеспечение.Если вы делаете это для развлечения, отлично;в противном случае это может оказаться невозможным.

Я нашел одну интересную ссылку, основанную на магистерской диссертации: Обратный инжиниринг программного обеспечения

0 голосов
/ 09 декабря 2011

Кажется, что есть тонна ресурсов, на которые вы можете посмотреть здесь:

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

...