Frage

Kann ein Compiler geschrieben werden, von dem man nicht umgekehrt die Grammatik konstruieren kann und die Bedeutung der Eingabesprache.

d. können Sie die Angabe der Sprache, vom Compiler immer bekommen?

Lassen Sie uns sagen, dass ich von kompilieren wollen ?? zu einer Sprache, aber ich will nicht Leute, die die Compiler ??

lesen und verstehen können lesen

Ich persönlich habe das Gefühl, dass Compiler und Sprachspezifikationen isomorph sind, aber ich habe Interesse aus wissenschaftlicher Sicht, ob dies falsch ist.

War es hilfreich?

Lösung

Unter der Annahme, Sie sagen, sie haben nur Zugriff auf die binären:

Kurze Antwort:. Nicht, wenn eine Person Sorgen genug

Lange Antwort: Es ist immer möglich, wenn eine Person so geneigt und war viel freie Zeit hatte, den Compiler bis auf Byte-Ebene zu zerreißen und es vollständig abzubilden. Von dort aus können Sie die Logik könnten Bäume herausfinden, und die Sprache rekonstruieren.

Es wäre schmerzhaft, aber dies fällt unter der gleichen Kategorie wie „kann ich jemals von Knacken der CD-Keys Überprüfung einen Algorithmus, der verhindert, dass ein dedizierter Benutzer machen“.

Nun, wenn Sie nie geben tatsächlich den Compiler zu einer Person (eine Art Proxy-Systems vorstellen?) Könnte es sinnvoll sein, zu sagen, dass ein Benutzer eine sehr berücksichtigen müßte, sehr lange Zeit, um Brute-Force die Sprachspezifikationen, wenn er jemals etwas erzeugen, das es vollständig ausüben können.

Wenn Sie was impliziert, dass sie Zugriff auf den Quellcode haben:

Nein. Sie können es verschleiern, aber der Compiler hat immer noch die gleichen logischen Bäume zu konstruieren, egal wie schwer zu lesen.

Es könnte einige esoterische Weg zu tun this..if Sie die Sprache Baum in einer Art von verschlüsselten binärer Form separat zur Verfügung gestellt ... und liefern nicht den Compiler source..and Ihre Anwender wurden nicht NSA Typen gebohrt .

Andere Tipps

ich glaube, der Compiler immer die Spezifikation der Sprache zeigt, dass es kompiliert (ich bin mir bewusst, dass dies ist super hand wellig).

Allerdings gibt es wahrscheinlich keinen Algorithmus, dies zu tun (das heißt, es ist unentscheidbar), weil zum Beispiel dass Algorithmus müßte, welche Programme die Compiler werden halt auf.

erfahren

Nein, sie sind nicht das gleiche. Aber ein Compiler versteht unweigerlich die Grammatik der Eingabesprache, und (hoffentlich) folgt die Sprachspezifikation sehr genau. Daher Verständnis der Compiler Mittel diejenigen zu verstehen.

Natürlich ist es möglich, den Compiler Quellcode so schwer zu verschleiern, dass niemand es zu lesen wird die Mühe und die Grammatik zu extrahieren und die Regeln der Sprache. Natürlich ist das auch Entwickler verletzt (Aufrechterhaltung viel Glück, dass Mist!).

Auch die Quelle des Compiler lesen würde meine letzte Option sein, wenn ich etwas über die Sprache wissen will (nicht darüber, wie es implementiert ist, sondern, wie es definiert auf einer abstrakteren Ebene) - Ich leite würde den spec oder ein anderen authorative Quelle (offizielle Dokumente usw.), wie es wäre viel einfacher, auch wenn der Code des Compiler ist sehr verständlich.

Mein Bauchgefühl ist, dass Sie das semantische Verhalten des Compilers bestimmen könnten durch die Ausgabe Inspektion. Aber man könnte die tatsächliche Syntax ohne Dokumentation oder den Zugang zu der Compiler Quelle nicht erhalten. wenn Sie die Quelle haben dies trivial, so dass ich nehme an, Sie nicht die Quelle des Compilers haben, nur Zugang zu ihm als Werkzeug.

In der Regel, wenn es eine Information über Semantik im Code (und es gibt immer eine operationale Semantik in jedem Interpreter oder Compiler definiert ist), dann ist es immer möglich, dass die Informationen zu extrahieren. Die einzige Frage ist die Komplexität eines solchen Reverse-Engineering. So müssen Sie eine verschleierte Sprache und einen verschleierten Compiler.

Werfen Sie einen Blick auf die Malbolge "Decompiler" zum Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top