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

Compiler construction 如何对编译器进行反向工程?,compiler-construction,reverse-engineering,Compiler Construction,Reverse Engineering,我有一个编译器,可以为一个未记录的VM编译成未记录的字节码。我希望能够编译到同一个虚拟机,但我不知道如何去做这件事。我如何学习做这件事?有人发表过他们做同样事情的日志或日志吗 编辑:我忘了提到这是乐高头脑风暴的主题。在任何人提出其他建议之前,我知道所有关于nXc和类似项目的信息,因为我正在帮助第一个FTC机器人团队,该团队只允许使用RobotC或LabView,所以我不能选择这些项目 至于那些建议我以编译器的语言为目标的人,我还没有这样做,因为我希望编译器没有公开的硬件的某些特性会被固件公开,因

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

编辑:我忘了提到这是乐高头脑风暴的主题。在任何人提出其他建议之前,我知道所有关于nXc和类似项目的信息,因为我正在帮助第一个FTC机器人团队,该团队只允许使用RobotC或LabView,所以我不能选择这些项目


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

我倾向于反汇编编译器。如果它是用.NET(C#,VB.NET等)或Java编写的,则会有一些反编译器,它们将为您提供与原始源代码非常接近的内容(除非已混淆)。即使它是C++,并且只能获得程序集,库调用可能指向正确的方向。

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

如果您可以发布关于特定编译器/VM的更多信息,那么可能其他人也有这方面的经验

编辑:鉴于这是一个商业产品,通过反编译对其进行反向工程很可能会违反其许可协议。重新使用字节码可能不会(我不是律师)。不过,听起来你好像陷入了第二十二条军规。如果您成功了,您就不会使用RobotC或LabView。如果竞赛只指定代码必须在RobotC VM上运行,那么它可能是可行的。但是,请记住,一旦你成为字节码,你仍然必须在任何人编写任何软件之前编写自己的编译器。如果你这样做是为了好玩,那太好了;否则它可能不可行


我确实在一篇硕士论文中找到了一个有趣的链接:

这里似乎有大量的资源,您可以查看:


编译器只是另一个程序,可以进行调试。这可能需要几个月的时间。让您的编译器以您已经拥有的编译器的输入语言为目标如何?我不相信您理解我的问题——这些资源都不适用,因为RobotC使用自定义固件,并且我仅限于使用RobotC(LabView在这里不是一个选项)。不幸的是,“RobotC…需要自定义固件才能运行。”顺便说一句,针对输入语言提出了很好的建议——我建议将该评论转移到您的答案中。虽然这对OP没有帮助,但在类似情况下可能会帮助其他人。是的,我们只需要使用固件(VM),而不是实际的编译器。我是PL人,所以编译器对我来说就像第二天性,只要我对字节码有某种规范。