如何对编译器进行反向工程?

时间:2011-12-09 01:10:17

标签: compiler-construction reverse-engineering

我有一个编译器,可以为未记录的VM编译未记录的字节码。我希望能够编译到同一个VM,但我不知道如何去做这个。我该如何学习呢?有没有人发表过他们做同样事情的日志或期刊?

编辑:我忽略了提到这是LEGO Mindstorms的RobotC 3.0 compiler。在任何人提出其他建议之前,我都知道关于nXc和类似项目的所有内容,因为我正在帮助第一个FTC机器人团队,它只是被允许使用RobotC或LabView,所以它们不是一个选项。

对于那些建议我以编译器语言为目标的人,我还没有这样做,因为我希望固件会暴露编译器未公开的某些硬件功能,因为我想做比RobotC允许的更多的自定义内存管理。

2 个答案:

答案 0 :(得分:5)

我倾向于反汇编编译器。如果它是用.NET(C#,VB.NET等)或Java编写的,那么有一些反编译器会给你一些非常接近原始源代码的东西(除非它被混淆)。即使它是C ++而且你只能进行汇编,库调用可能会指向正确的方向。

如果字节码很小,另一个选择是从“Hello world”程序开始,编译它,做一个小改动,编译它,然后区分两个字节码结果。

如果您可以发布有关特定编译器/ VM的更多信息,也许其他人有相关经验。

编辑:鉴于这是商业产品,通过反编译对其进行逆向工程可能会违反其许可协议。重新编写字节码可能不是(我不是律师)。听起来你好像是在Catch-22中。如果您成功,则不使用RobotC或LabView。如果比赛仅指定代码必须在RobotC VM上运行,则可能是可行的。但请记住,一旦你重新编写了字节码,你就必须在任何人编写任何软件之前编写自己的编译器。如果你这样做是为了好玩,很棒;否则可能不可行。

我确实找到了一个基于硕士论文的有趣链接:Software Reverse Engineering

答案 1 :(得分:0)

您可以在此处查看大量资源:

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