7
votes

Compilateur Digital Mars D; Acquérir la sortie ASM

Je lis le livre d'Andrei Alexandrescu à propos du langage de programmation D. C'est un excellent écrivain et fait un très bon travail pour expliquer des aspects de la langue D. Cependant, je trouve certains constructions difficiles à comprendre lorsque je ne peux pas imaginer la sortie de l'ASM ou les conséquences de certains mots-clés (tels que, ouc., etc. ou d'autres constructions). Même si mon ASM est plutôt mauvais et que je ne l'utilise jamais, cela m'aide beaucoup à comprendre comment certains mots-clés fonctionnent à l'ordinateur et au travail effectué.

Le compilateur DMD possède de nombreuses fonctionnalités intéressantes (couverture de code, interfaces génératrices (fichiers d'en-tête), documentation génératrice, profilage, ...) mais je n'ai pas vu de commutateur pour sortir du code ASM. Le compilateur génère des fichiers .OBJ et de lire le lien suivant: http: //www.digitalmars. com / ctg / obj2asm.html Je suppose que j'ai besoin d'un outil pour convertir manuellement les fichiers d'objets. Je préférerais un commutateur de compilateur, y a-t-il un?

En bas de cette page, je suis lié à une page où je peux payer les produits mentionnant contenant cet outil. Venant d'un contexte GNU, je suis très froncé sur cela. Est-ce pour C / C ++ uniquement, ou cela s'applique-t-il également pour le compilateur D?

y a-t-il d'autre moyen de convertir ces fichiers .OBJ en code ASM lisible ou dois-je recourir à d'autres compilateurs D (tels que GDC ou LDC) pour acquérir une sortie ASM? Je préfère ne pas le faire. DMD est créé par le fondateur lui-même, je suis sûr qu'il a bien mis en œuvre la plupart des fonctionnalités correctement / largement optimisées.

Alors, comment puis-je jeter un coup d'œil au code ASM?

merci.


1 commentaires

De plus, DMD est le seul compilateur avec un support complet pour D 2.0


3 Réponses :


-1
votes

Le backend du compilateur de Mars numérique est sous licence commerciale, non open source, il est peut-être d'expliquer pourquoi les outils relatifs à la sortie backend sont également propriétaires.

à des fins éducatives, vous pouvez essayer http://dgcc.sourceforge.net/ qui est un D extrémité avant sur le backend GCC, donc entièrement open source.


3 commentaires

Tous les compilateurs de Mars numériques sont (Afaik) disponibles gratuitement; et le compilateur de référence D (DMD) est sous une licence GPL. La plupart de leurs outils sont aussi.


Seule l'extrémité avant est gpl. L'arrière-plan est sous licence commerciale.


@Peter Alexander mais le code source est disponible néanmoins .



10
votes

L'utilitaire obj2asme est fourni par la suite DMD Compiler, qui est disponible gratuitement (sous une licence double GPL et artistique). Voir Compiler DMD pour Linux sur le site Web de la programmation de D. < / p>


2 commentaires

Merci, donc un système d'exploitation Linux serait nécessaire d'obtenir des sources d'ASM (ou un autre outil)? Je ne suis pas sûr de savoir pourquoi c'est Linux seulement ...


Voici le binaire Windows de obj2asme Github. com / digitalmars / dmc / blob / maître / bin / obj2asm.exe



7
votes

Vous pouvez essayer objconv . C'est ce que j'utilise. La raison pour laquelle DMD ne produit pas l'assembleur via un commutateur est dû au fait qu'elle ne génère jamais ASM comme une étape discrète. Il génère des opérations binaires directement à partir de sa représentation interne. Cela fait partie de la raison pour laquelle il compile si vite.

ou vous pouvez utiliser le DMD Obj2ase outil qui est emballé avec DMD. P>

obj2asm somefile.o > somefile.s


5 commentaires

Merci, cela me donne en effet la sortie ASM.


Existe-t-il un moyen de réduire la sortie de l'ASM au code que je me suis écrit? Pour le moment, le fichier d'objet semble avoir été lié de manière statique à la bibliothèque de D, est-ce possible ou devrais-je simplement vivre avec elle?


@Daevius: Il n'y a probablement pas beaucoup que vous puissiez faire ici. Celles-ci doivent être des instantanations de modèles, car le reste des phobos ne devrait pas se retrouver dans le même fichier d'objet car il est compilé séparément.


Si vous êtes sur Linux, vous pourrez peut-être utiliser sed pour filtrer les trucs que vous ne voulez pas.


Ceci est maintenant objdump .