2011-12-09 10 views
8

Mam kompilator, który kompiluje się do nieudokumentowanego kodu bajtowego dla nieudokumentowanej maszyny wirtualnej. Chciałbym móc kompilować do tej samej maszyny wirtualnej, ale nie jestem pewien, jak to zrobić. Jak mogę się tego nauczyć? Czy ktokolwiek opublikował dziennik lub dziennik robiący to samo?Jak wykonać inżynierię wsteczną kompilatora?

EDYTOWANIE: Nie wspomniałem, że jest to RobotC 3.0 compiler dla LEGO Mindstorms. Zanim ktokolwiek zaproponuje coś innego, wiem wszystko o nXc i podobnych projektach i nie są one opcją, ponieważ pomagam zespołowi robotów FIRST FTC, który może używać RobotC lub LabView.

Jeśli chodzi o tych, którzy sugerowali, że celuję w język kompilatora, nie robię tego jeszcze, ponieważ mam nadzieję, że niektóre funkcje sprzętu, które nie zostaną ujawnione przez kompilator, zostaną ujawnione przez oprogramowanie układowe , a także dlatego, że chcę wykonać więcej niestandardowego zarządzania pamięcią niż dozwolona przez RobotC.

+3

Kompilator jest po prostu inny program i może być debugowany w ten sposób. – karlphillip

+3

Może to potrwać miesiące. Co powiesz na to, że twój kompilator celuje w język wejściowy kompilatora, który już masz? –

Odpowiedz

5

Moja skłonność polegałaby na rozmontowaniu kompilatora. Jeśli jest napisany w .NET (C#, VB.NET, itp.) Lub Java, są dekompilatory, które dadzą ci coś bardzo zbliżonego do oryginalnego kodu źródłowego (chyba że jest on zaciemniony). Nawet jeśli jest to C++ i można uzyskać tylko montaż, wywołania biblioteki mogą wskazywać ci właściwy kierunek.

Jeśli kod bajtowy jest mała, innym rozwiązaniem jest rozpoczęcie programu "Hello World", skompilować go, zrobić mały zmień, skompiluj, a następnie zmień dwa wyniki kodu bajtowego.

Jeśli możesz zamieścić więcej informacji na temat konkretnego kompilatora/maszyny wirtualnej, być może ktoś inny ma z tym doświadczenie.

Edit: Biorąc pod uwagę, że jest to produkt komercyjny, to jest prawdopodobne, że reverse-engineering to przez dekompilacji naruszy jego umowa licencyjna. Odnowienie kodu bajtowego może nie być (nie jestem prawnikiem). Wygląda na to, że jesteś w Catch-22. Jeśli ci się uda, nie używasz RobotC ani LabView. Jeśli konkurs określa tylko, że kod musi działać na maszynie wirtualnej RobotC, może być wykonalny. Pamiętaj jednak, że po ponownym wpisaniu kodu bajtowego musisz napisać własny kompilator, zanim ktokolwiek będzie mógł napisać oprogramowanie. Jeśli robisz to dla zabawy, świetnie; w przeciwnym razie może nie być to możliwe.

znalazłem jeden ciekawy związek opiera się na pracy magisterskiej: Software Reverse Engineering

+0

Dobra uwaga - jestem niepotrzebnie niejasna. Pytanie zaktualizowane. – Silas

+1

Tak, wymagane jest tylko użycie oprogramowania układowego (VM), a nie rzeczywistego kompilatora. Jestem PL osobą, więc kompilatory są dla mnie drugą naturą, o ile mam jakieś specyfikacje dotyczące kodu bajtowego. – Silas

0

pojawia się mnóstwo zasobów, które można spojrzeć tutaj:

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

+0

Nie wierzę, że rozumiesz mój problem - żaden z tych zasobów nie ma zastosowania, ponieważ RobotC używa niestandardowego oprogramowania układowego, a ja jestem ograniczony do korzystania z RobotC (LabView w rzeczywistości nie jest tu dostępny). – Silas

+0

Niestety "RobotC ... wymaga niestandardowego oprogramowania w celu uruchomienia." BTW świetna sugestia na temat kierowania na język wprowadzania tekstu - Proponuję przeniesienie tego komentarza do Twojej odpowiedzi. Chociaż to nie pomoże OP, może pomóc innym w podobnej sytuacji. – TrueWill

Powiązane problemy