Optimizaciones fatales

Los compiladores transforman el código que escribimos para hacerlo más eficiente, sin embargo, hay veces en las que estas optimizaciones hechas por el compilador pueden causar problemas de seguridad. Un claro ejemplo de esto es la eliminación de código muerto

¿Cómo funciona un linker? (III) – Tipos de símbolos

Tras aprender qué información contiene la tabla de símbolos en la entrega anterior, ahora podemos hablar más detenidamente de los atributos que puede tener un símbolo y qué papel tienen en la resolución de símbolos desde el punto de vista

¿Cómo funciona un linker? (II) – La tabla de símbolos

En entregas anteriores hablábamos de que los linkers son los encargados de combinar diferentes ficheros de código objeto trasladable en un ejecutable. Para ello tenían dos tareas fundamentales, la resolución de símbolos y el traslado; en esta entrega vamos a

¿Cómo funciona un linker? (I)

En el proceso de convertir el código de un lenguaje de alto nivel a un ejecutable que entienda nuestro sistema, los linkers tienen un rol que muchas veces pasa desapercibido, pero que es importante de conocer. Cuando queremos convertir un archivo

¿Cómo funciona un compilador?

En la serie de posts de Hardening de binarios hemos visto que muchas defensas vienen implantadas en los propios compiladores, pero ¿cómo se implementan? Tomando el caso de GCC, The GNU Compiler Collection, vamos a explicar la infraestructura general de