Diferencia entre revisiones de «Ingeniería Inversa/Desensambladores»

Contenido eliminado Contenido añadido
Rotxa (discusión | contribs.)
Línea 103:
== Problemas del desensamblador ==
 
=== SeparatciónSeparación de código y datos ===
 
Puesto que tanto instrucciones como datos están almacenados como datos binarios en un fichero ejecutable, una pregunta surge espontáneamente: ¿Como puede un desensamblador separar código de datos? ¿Es un byte en particular una variable, o parte de una instrucción?
 
El problema no sería tan dificil si los datos se limitaran a la sección .data del ejecutable (explicado en un capítulo posterior) y si el código ejecutable estuviese limitado también a la sección .code del ejecutable, pero a menudo este no es el caso. Los datos pueden estar insertados directamente en la sección de código (por ejemplo, las tablas de direcciones de salto), y código ejecutable puede estar almacenado en la sección de datos ( aunque sistemas nuevos evitarán esto por razones de seguridad).
El problema
 
Muchos desensambladores interactivos ofrecerán al usuario la opción de mostrar segmentos de código como código o datos, pero los desensambladores no interactivos harán esta separación automáticamente.
The problem wouldn't be as difficult if data were limited to the .data section of an executable (explained in a later chapter) and if executable code was limited to the .code section of an executable, but this is often not the case. Data may be inserted directly into the code section (e.g. jump address tables, constant strings), and executable code may be stored in the data section (although new systems are working to prevent this for security reasons).
 
Many interactive disassemblers will give the user the option to render segments of code as either code or data, but non-interactive disassemblers will make the separation automatically. Disassemblers often will provide the instruction AND the corresponding hex data on the same line, to reduce the need for decisions to be made about the nature of the code. Some disassemblers (e.g. ciasdis) will allow you to specify rules about whether to disassemble as data or code and invent label names, based on the content of the object under scrutiny. Scripting your own "crawler" in this way is more efficient; for large programs interactive disassembling may be unpractical to the point of being unfeasible.