Compiler construction 数字D编译器;获取ASM输出

Compiler construction 数字D编译器;获取ASM输出,compiler-construction,d,dmd,Compiler Construction,D,Dmd,我正在读AndreiAlexandrescu写的关于D编程语言的书。他是一位优秀的作家,在解释D语言方面做得相当好。然而,当我无法想象ASM输出或某些关键字(如in、out等或其他构造)的结果时,我发现某些构造很难理解。尽管我的ASM非常糟糕,而且我从来没有使用过它,但它能帮助我理解某些关键字在计算机上的工作方式以及正在完成的工作 DMD编译器有许多有趣的特性(代码覆盖率、生成接口(头文件)、生成文档、分析等等),但我还没有看到转换到输出ASM代码的情况。编译器确实生成了.obj文件,通过读取以

我正在读AndreiAlexandrescu写的关于D编程语言的书。他是一位优秀的作家,在解释D语言方面做得相当好。然而,当我无法想象ASM输出或某些关键字(如in、out等或其他构造)的结果时,我发现某些构造很难理解。尽管我的ASM非常糟糕,而且我从来没有使用过它,但它能帮助我理解某些关键字在计算机上的工作方式以及正在完成的工作

DMD编译器有许多有趣的特性(代码覆盖率、生成接口(头文件)、生成文档、分析等等),但我还没有看到转换到输出ASM代码的情况。编译器确实生成了.obj文件,通过读取以下链接:我怀疑我需要一个工具来手动转换对象文件。我想要一个编译器开关,有吗

在该页面的底部,我链接到一个页面,在那里我可以支付包含该工具的产品的费用。来自GNU背景的我对此非常不满。这仅适用于C/C++还是同样适用于D编译器

是否有其他方法将这些.obj文件转换为可读的ASM代码,或者我必须求助于其他D编译器(如GDC或LDC)来获取ASM输出?我宁愿不去。DMD是创始人自己创建的,我相信他正确地实现了大多数功能/进行了大量优化

那么,我怎样才能看一眼ASM代码呢


谢谢。

Digital Mars编译器的后端是商业许可的,而不是开源的,也许可以解释为什么与后端输出相关的工具也是专有的


出于教育目的,您可以尝试使用GCC后端上的D前端,因此完全是开源的。

obj2asm实用程序由DMD编译器套件提供,该套件免费提供(在双重GPL和艺术许可证下)。请参见D编程语言网站。

您可以试试。这是我用的。DMD不通过开关输出汇编程序的原因是它从不作为离散步骤生成ASM。它直接从内部表示生成二进制操作码。这也是它编译速度如此之快的部分原因

或者,您可以使用DMD附带的DMD工具

obj2asm somefile.o > somefile.s

所有数字火星编译器(AFAIK)均免费提供;并且引用D编译器(DMD)是在GPL许可下的。他们的大多数工具也是。只有前端是GPL。后端是商业许可的。@Peter Alexander,但仍然可以使用。此外,DMD是唯一完全支持D 2.0的编译器谢谢,因此需要Linux操作系统才能获得ASM源代码(或其他工具)?我不知道为什么这只是Linux…这是
obj2asm
的windows二进制文件谢谢,它确实给了我ASM输出。有没有办法将ASM输出减少到我自己编写的代码?目前,对象文件似乎已经静态链接到D的库,这是可能的还是我应该接受它?@daevius:这里可能没有什么可以做的。这些应该是模板实例,因为Phobos的其余部分不应该在同一个对象文件中结束,因为它是单独编译的。如果您碰巧在linux上,您可能可以使用
sed
过滤掉您不想要的内容。现在是
objdump