Question

un compilateur peut être écrit à partir de laquelle vous ne pouvez pas désosser la grammaire et la signification de la langue d'entrée.

i.e.. pouvez-vous toujours obtenir la spécification de la langue du compilateur?

Disons que je veux compiler à partir ?? dans une certaine langue, mais je ne veux pas que les gens qui lisent le compilateur pour pouvoir lire et comprendre ??

J'ai personnellement le sentiment que les compilateurs et les spécifications linguistiques sont isomorphes mais je suis intéressé d'un point de vue académique que cela est faux.

Était-ce utile?

La solution

En supposant que vous dites qu'ils ont seulement accès au binaire:

Réponse courte:. Pas si une personne se soucie assez

Réponse longue: Il est toujours possible, si une personne était si incliné et avait beaucoup de temps libre, de déchirer le compilateur vers le bas au niveau de l'octet et la carte complètement. A partir de là, vous pouvez comprendre les arbres logiques, et de reconstruire la langue.

Il serait douloureux, mais cela relève de la même catégorie que « puis-je jamais faire un algorithme qui empêche un utilisateur dédié de la fissuration de la vérification clé cd ».

Maintenant, si vous ne avez jamais donné le compilateur à une personne (imaginez une sorte de système de proxy?), Il pourrait être raisonnable de dire qu'un utilisateur devrait prendre un très, très longtemps à la force brute les spécifications linguistiques, s'il pouvait générer jamais quelque chose qui pourrait exercer complètement.

Si vous insinuez qu'ils ont accès au code source:

Non

. Vous pouvez obscurcir, mais le compilateur doit encore construire peu importe la difficulté à lire, les mêmes arbres logiques.

Il pourrait y avoir une certaine façon ésotérique faire this..if que vous avez fourni l'arbre de langue séparément dans une sorte de forme binaire crypté ... et n'a pas fourni le compilateur de source..and vos utilisateurs se sont pas ennuyés types NSA .

Autres conseils

Je pense que le compilateur révèle toujours la spécification de la langue qu'il compile (je suis conscient que c'est super main ondulé).

Cependant, il n'y a probablement pas d'algorithme de le faire (à savoir qu'il est indécidable), parce que, par exemple cet algorithme aurait besoin de savoir quels programmes le compilateur s'arrête sur.

Non, ils ne sont pas les mêmes. Mais un compilateur comprend inévitablement la grammaire de la langue d'entrée, et (je l'espère) suit la spécification de langage très précisément. Par conséquent, la compréhension des moyens de compilateur comprendre ceux-ci.

Bien sûr, il est possible de masquer le code source du compilateur si fortement que personne ne se donnera la peine de le lire et d'en extraire la grammaire et les règles de la langue. Bien sûr, cela fait mal aux développeurs aussi (bonne chance maintenant cette merde!).

En outre, la lecture de la source du compilateur serait ma dernière option si je voulais savoir quelque chose sur la langue (pas sur la façon dont il est mis en œuvre, mais comment il est défini sur un niveau plus abstrait) - Je dirige vers la spécification ou un autre la source authoritative (docs officiels, etc.), car il serait plus facile, même si le code du compilateur est très compréhensible.

Mon sentiment profond est que vous pouvez déterminer le comportement sémantique du compilateur en inspectant la sortie de lui. Mais vous ne pouviez pas obtenir la syntaxe réelle sans la documentation ou l'accès à la source du compilateur. si vous avez la source ce trivial devient, donc je suppose que vous n'avez pas la source du compilateur, un accès juste comme un outil.

En général, s'il y a une information sur la sémantique dans le code (et il y a toujours une sémantique opérationnelle définie dans un interprète ou compilateur), il est toujours possible d'extraire cette information. La seule question est la complexité d'une telle ingénierie inverse. , Vous avez besoin d'un langage et un compilateur Obfuscated obfuscation.

Jetez un oeil à la Malbolge "décompilateur" par exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top