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

Sil*_*der 8 compiler-construction reverse-engineering

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

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

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

Tru*_*ill 5

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

如果字节码很小,另一个选择是从"Hello world"程序开始,编译它,进行一些小改动,编译它,然后区分两个字节码结果.

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

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

我找到了一个基于硕士论文:软件逆向工程的有趣链接