4

为了好玩,我正在开发一种小型语言的编译器,我首先针对的是 ARM 指令集,因为它很简单。目前,我能够编译代码,因此我为每个方法的主体提供了 ARM 机器代码。在这一点上,我需要开始将一些事情联系在一起:

  • 我应该将我的机器代码保存为什么格式,以便我可以...
  • 在什么调试器中运行它?

目前没有 I/O 支持等,因此调试将在很大程度上取决于我是否能够逐步完成反汇编并查看处理器寄存器/内存。

我正在运行 Windows,而我的编译器仅在 Windows 中运行,因此在 Windows 上使用某种模拟器会更好。

编辑:看来我可以使用 Visual Studio Windows Mobile 6 模拟器。现在,我可以简单地将结果保存为简单的二进制格式,并通过一个微型 C++ 控制台应用程序将其加载到仿真器内存中,然后使用函数指针跳转到其中。后来,看来我需要支持 ELF 和 PE 格式。

4

1 回答 1

3

关于文件格式......最简单的是:

这些格式可以记录二进制数据和要加载的数据的目标地址范围。就是这样。

包含更多信息的更强大的格式:

  • 精灵
    • 要获得最大信息,请包含DWARF调试信息

ELF 得到相当广泛的支持,而且不太复杂。DWARF 允许您记录非常有表现力的调试信息,以便调试复杂的语言结构。然而,为了实现这种表现力,它可能是一种非常复杂的编写格式。

于 2009-08-25T23:58:10.870 回答