Pregunta

Puede un compilador de ser escrito, de la que no se puede realizar ingeniería inversa de la gramática y el significado del idioma de entrada.

es decir. ¿Puede usted conseguir la especificación de la lengua del compilador?

Digamos que quiero compilar desde ?? a un lenguaje, pero no quiero que la gente que lee el compilador para ser capaz de leer y entender ??

Yo personalmente tengo la sensación de que los compiladores de lenguaje y especificaciones son isomorfos pero me interesa desde el punto de vista académico si esto está mal.

¿Fue útil?

Solución

Si se asume que usted está diciendo que sólo tienen acceso al binario:

Breve respuesta:. No, si una persona se preocupa lo suficiente

Long respuesta: Siempre es posible, si una persona estaba tan inclinado y tenía un montón de tiempo libre, a rasgar el compilador hasta el nivel de byte y el mapa completo. A partir de ahí, se puede averiguar los árboles lógicos, y reconstruir el idioma.

Sería doloroso, pero esto cae bajo la misma categoría como "¿Puedo volver a realizar un algoritmo que evita que un usuario específico se agriete la verificación clave del CD-".

Ahora, si en realidad nunca dio el compilador para una persona (imaginar algún tipo de sistema proxy?) Podría ser razonable decir que un usuario tendría que tener un muy, muy largo tiempo a la fuerza bruta las especificaciones del lenguaje, si alguna vez podría generar algo que podría ejercer por completo.

Si está insinuando que tienen acceso al código fuente:

No. Se puede confundir, pero el compilador todavía tiene que construir los mismos árboles lógicos, no importa lo difícil de leer.

Es posible que haya alguna manera esotérica hacer this..if que ya ha proporcionado el árbol de la lengua por separado en algún tipo de formato binario codificado ... y no suministrar el compilador de source..and sus usuarios no se aburre tipos NSA .

Otros consejos

Creo que el compilador siempre revela la especificación del lenguaje que compila (soy consciente de que esto es super ondulado a mano).

Sin embargo, es probable que haya ningún algoritmo para hacerlo (es decir, es indecidible), porque, por ejemplo, que el algoritmo tendría que averiguar qué programas el compilador se detiene ante.

No, ellos no son los mismos. Pero, inevitablemente, un compilador entiende la gramática del idioma de entrada, y (con suerte) sigue la especificación del lenguaje de forma muy precisa. Por lo tanto, la comprensión de los medios compilador comprensión de aquellos.

Por supuesto que es posible para ofuscar el código fuente del compilador tan fuertemente que nadie se molestará en leer y extraer la gramática y las reglas del lenguaje. Por supuesto que duele demasiado desarrolladores (buena suerte mantener esa basura!).

Además, la lectura de la fuente del compilador sería mi última opción si quería saber algo sobre la lengua (no se trata de cómo se implementa, pero cómo es definida en un nivel más abstracto) - Me gustaría ir a la especificación o algún otro fuente authorative (documentos oficiales, etc.), ya que sería manera más fácil, incluso si el código del compilador es muy comprensible.

Mi primera impresión es que se puede determinar el comportamiento semántico del compilador mediante la inspección de su salida. Pero no se podía obtener la sintaxis real sin la documentación o el acceso a la fuente del compilador. si usted tiene la fuente de esto se vuelve trivial, así que estoy asumiendo que usted no tiene la fuente del compilador, justo acceso a ella como una herramienta.

En general, si hay una información sobre la semántica en el código (y siempre hay una semántica operativos definidos en cualquier intérprete o compilador), entonces es siempre posible extraer esa información. La única cuestión es la complejidad de una ingeniería inversa tales. Por lo tanto, es necesario un lenguaje ofuscado y un compilador ofuscado.

Tome un vistazo a la "decompilador" Malbolge por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top