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

Contenido eliminado Contenido añadido
Sin resumen de edición
Línea 111:
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. Los desensambladores suelen proveer en la misma línea la instrucción y sus correspondientes datos en hexadecimal, para reducir la necesidad de hacer decisiones sobre la naturaleza del código. Algunos desensambladores (por ejemplo, ciasdis) te permiten especificar reglas sobre si desensamblar como datos o código e inventar nombres para la etiquetas, basándose en el contenido del objeto bajo escrutinio. Scriptaer tu propio "crawler" de esta manera es más eficiente; para programas grandes el desensamblaje interactivo puede ser difícil hasta el punto de no ser practicable.
 
El problema general de separar datos de código en ejecutables arbitrarios es equivalente al Halting Problem. Como consecuencia, no es posible escribir un desensamblador que separe correctamente datos de código para todos los programas de input. La ingeniería Inversa está llena de tales limitaciones teóricas, anuqueaunque por el teorema de Rice ( [[wikipedia:Rice's theorem | Rice's theorem]] ) todas las preguntas interesantes sobre propiedades de los programas son indecidibles (así que los compiladores y muchas otras herramientas que tratan con programas en cualquier manera también se encuentran con tales límites). En la práctica una combinación de análisis automático e interactivo con perseverancia puede manejar todos los programas excepto aquellos específicamente diseñados para frustrar la ingeniería inversa, como el uso de encripción o el desencriptado de código justo antes de usarse, y mover código de un lado a otro en memoria.
 
=== Lost Information ===