2010-12-01 15 views
8

Hay momentos en los que resulta útil comprender los desensamblajes de idiomas superiores, como C o C++. Leer un libro sobre ensamblaje es obviamente una parte necesaria para entender la salida del compilador, pero en mi experiencia escribir código ensamblador desde cero es algo bastante diferente de leer y comprender los códigos de operación que produce un compilador. Los libros que conozco sobre ensamblaje no cubren esa parte muy bien, aunque creo que si alguna vez te pones en contacto con el ensamblaje, la mayoría intentará comprender la salida del compilador.Tutoriales/libros sobre la comprensión de la salida de ensamblaje

¿Conoces buenos tutoriales en profundidad (o tal vez libros) sobre cómo interpretar la salida del compilador?

Lo que tengo en mente sería una presentación de las expresiones idiomáticas comunes de alta calidad y cómo se convierten a ensamblado por compiladores comunes (msvc y gcc).

+0

Creo que desea interpretar el archivo exe MZ. así que busca mz exe en google y sigue la wikipedia. – Amir

Respuesta

0

Puede compilar algunos archivos c, C++ y mantener la salida del ensamblador (opción -s creo) y comparar la salida generada con sus archivos fuente.

Esto debería ayudarlo a comprender el código ensamblador generado y reconocer patrones repetitivos (llamadas de método/función, devoluciones, bucles, inicialización, etc.). No habilite la optimización, esto transformaría el código generado y lo haría más difícil de entender.

+0

He hecho una extensa experimentación con la enseñanza de este método en el pasado (ver http://opensolaris.org/os/community/documentation/files/book.pdf sorry shameless plug) y debo sugerir: _DO_ use optimization. Simplemente no el nivel más alto. Esto se debe a que el código ensamblador no optimizado está lleno de operaciones innecesarias ... el código ligeramente optimizado es mucho más fácil de leer. –

+0

@FrankH: me parece que el compilador desempeña un papel más importante que el nivel de optimización real, MSVC genera código muy legible en ambos extremos del espectro de optimización, al menos desde mi perspectiva, donde el código generado por GCC parece bastante desordenado con toneladas de acceso a la pila, tal vez simplemente no estoy configurando correctamente el nivel de optimización en GCC: P – Necrolis

2

Todo [*] Sé acerca de cómo leer el ensamblaje x86, lo aprendí haciendo un solo paso en un depurador en la vista de desensamblaje. Es útil tener una referencia de código de operación abierta al mismo tiempo, pero para ser honesto puedes vivir sin la mayor parte del tiempo, porque mientras el compilador no esté optimizando demasiado, sabes lo que realmente está haciendo desde la fuente C, contenido de variables, etc.

[*] Bueno, la mayoría de las cosas.

+0

así aprendí, los únicos "libros" de ensamblaje que he leído son los manuales de configuración y optimización de AMD e Intel. IMO esta ruta te da mucho más que cualquier libro o tutorial de 2 segundos, en muchos niveles – Necrolis

+0

@ Necrolis: me has puesto más esfuerzo que yo: no puedo * escribir * x86 ensamblado si mi vida dependía de ello. Pero si todo lo que necesita es averiguar qué ha hecho el optimizador esta vez, eso no importa. –

+0

Todo * Aprendí sobre el ensamblaje que aprendí de la programación del código de la máquina en un TRS-80 Modelo 1 cuando era un niño. :) –

Cuestiones relacionadas