De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Un desensamblador es un programa informático que traduce el lenguaje de máquina en lenguaje ensamblador -la operación inversa a la de un ensamblador . Un desensamblador se diferencia de un descompilador , que tiene como objetivo un lenguaje de alto nivel en lugar de un lenguaje ensamblador. El desensamblaje, la salida de un desensamblador, a menudo se formatea para la legibilidad humana en lugar de la idoneidad para la entrada a un ensamblador, lo que lo convierte principalmente en una herramienta de ingeniería inversa .

El código fuente del lenguaje ensamblador generalmente permite el uso de constantes y comentarios del programador . Por lo general, el ensamblador los elimina del código de máquina ensamblado. Si es así, un desensamblador que opere en el código de máquina produciría un desensamblaje sin estas constantes y comentarios; la salida desensamblada se vuelve más difícil de interpretar para un humano que el código fuente original anotado. Algunos desensambladores proporcionan una función de comentario de código incorporada donde la salida generada se enriquece con comentarios sobre funciones API llamadas o parámetros de funciones llamadas. Algunos desensambladores hacen uso de la información de depuración simbólica presente en archivos objeto como ELF. Por ejemplo, IDA permite al usuario humano inventar símbolos mnemotécnicos para valores o regiones de código en una sesión interactiva: el conocimiento humano aplicado al proceso de desmontaje a menudo es paralelo a la creatividad humana en el proceso de escritura de código.

En plataformas CISC con instrucciones de ancho variable , más de un desmontaje puede ser válido. Los desensambladores no manejan código que varía durante la ejecución.

Problemas de desmontaje [ editar ]

Es posible escribir un desensamblador que produzca código que, una vez ensamblado, produzca exactamente el binario original; sin embargo, a menudo existen diferencias. Esto plantea exigencias a la expresividad del ensamblador. Por ejemplo, un ensamblador x86 toma una elección arbitraria entre dos códigos binarios para algo tan simple comoMOV AX,BX. Si el código original usa la otra opción, el código original simplemente no se puede reproducir en un momento dado. Sin embargo, incluso cuando se produce un desmontaje completamente correcto, los problemas persisten si el programa requiere modificaciones. Por ejemplo, el código ensamblador puede generar la misma instrucción de salto en lenguaje de máquina para saltar a una ubicación específica (por ejemplo, para ejecutar un código específico), o para saltar un número específico de bytes (por ejemplo, para saltar una rama no deseada) . Un desensamblador no puede saber lo que se pretende y puede usar cualquiera de las sintaxis para generar un desensamblador que reproduce el binario original. Sin embargo, si un programador desea agregar instrucciones entre la instrucción de salto y su destino, es necesario comprender la operación del programa para determinar si el salto debe ser absoluto o relativo, es decir,si su destino debe permanecer en una ubicación fija, o debe moverse para omitir tanto las instrucciones originales como las agregadas.

Ejemplos de desmontadores [ editar ]

Un desensamblador puede ser autónomo o interactivo. Un desensamblador independiente, cuando se ejecuta, genera un archivo en lenguaje ensamblador que se puede examinar; uno interactivo muestra el efecto de cualquier cambio que el usuario realice de inmediato. Por ejemplo, es posible que el desensamblador inicialmente no sepa que una sección del programa es realmente código y lo trate como datos; si el usuario especifica que es código, el código desensamblado resultante se muestra inmediatamente, lo que permite al usuario examinarlo y realizar más acciones durante la misma ejecución.

Cualquier depurador interactivo incluirá alguna forma de ver el desmontaje del programa que se está depurando. A menudo, la misma herramienta de desmontaje se empaquetará como un desensamblador independiente distribuido junto con el depurador. Por ejemplo, objdump , parte de GNU Binutils , está relacionado con el depurador interactivo gdb . [1]

  • Ninja binario [2]
  • DEPURAR [3]
  • Desensamblador interactivo (IDA)
  • Ghidra
  • Hiew
  • Desmontador de tolva [1]
  • Netwide Disassembler (Ndisasm), compañero del Netwide Assembler (NASM).
  • OLIVER ( prueba / depuración interactiva CICS ) incluye desensambladores para Assembler, COBOL y PL / 1
  • OllyDbg es un depurador de análisis de nivel de ensamblador de 32 bits
  • Radare2
  • SIMON (prueba / depuración interactiva por lotes) incluye desensambladores para Assembler, COBOL y PL / 1
  • Sourcer , un desensamblador de comentarios de 16 bits / 32 bits para DOS , OS / 2 y Windows de V Communications en la década de 1990 [4]

Desmontadores y emuladores [ editar ]

Se puede incorporar un desensamblador dinámico en la salida de un emulador o hipervisor para "rastrear", línea por línea, la ejecución en tiempo real de cualquier instrucción de máquina ejecutada. En este caso, además de las líneas que contienen el código de máquina desensamblado, se pueden mostrar los registros y / o cambios de datos (o cualquier otro cambio de " estado ", como códigos de condición) que causa cada instrucción individual. junto o debajo de la instrucción desmontada. Esto proporciona información de depuración extremadamente poderosa para la resolución final del problema, aunque el tamaño de la salida resultante a veces puede ser bastante grande, especialmente si está activo para la ejecución de un programa completo. OLIVER proporcionó estas características desde principios de la década de 1970 como parte de su CICSoferta de productos de depuración y ahora se encuentra incorporado en el producto XPEDITER de Compuware .

Desensamblador de longitud [ editar ]

Un desensamblador de longitud , también conocido como motor desensamblador de longitud ( LDE ), es una herramienta que, dada una secuencia de bytes (instrucciones), genera el número de bytes que toma la instrucción analizada. Proyectos de código abierto notables para la arquitectura x86 incluyen ldisasm, [5] Tiny x86 Length Disassembler [6] y Extended Length Disassembler Engine para x86-64. [7]

Ver también [ editar ]

  • Gráfico de flujo de control
  • Análisis de flujo de datos
  • Descompilador

Referencias [ editar ]

  1. ^ a b https://www.hopperapp.com
  2. ^ https://binary.ninja
  3. Paul, Matthias R. (30 de julio de 1997). "Kapitel II.5. Allgemeines: Undokumentierte Möglichkeiten von DEBUG" [Características indocumentadas de DEBUG]. NWDOS-TIPs - Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds . MPDOSTIP . Release 157 (en alemán) (3 ed.). Archivado desde el original el 10 de septiembre de 2017 . Consultado el 6 de septiembre de 2014 .(NB. NWDOSTIP.TXT es un trabajo completo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y funciones internas no documentadas. Es parte de la colección MPDOSTIP.ZIP aún más grande del autor, mantenida hasta 2001 y distribuida en muchos sitios en el tiempo. El enlace proporcionado apunta a una versión anterior convertida en HTML del archivo NWDOSTIP.TXT).
  4. Sourcer - Commenting Disassembler (ed. De septiembre de 1989). V Communications, Inc. 1988. Número de pieza S0989-164 . Consultado el 21 de diciembre de 2019 .
  5. ^ ldesasmo
  6. ^ Pequeño desensamblador de longitud x86
  7. ^ Motor desensamblador de longitud extendida para x86-64

Lectura adicional [ editar ]

  • Vinciguerra, Lori; M. Wills, Linda; Kejriwal, Nidhi; Martino, Paul; Vinciguerra, Ralph L. (2003). "Un marco de experimentación para evaluar herramientas de desmontaje y recompilación para C ++ y Java]". Actas de la décima conferencia de trabajo sobre ingeniería inversa (WCRE) : 14–23. doi : 10.1109 / WCRE.2003.1287233 . ISBN 0-7695-2027-8. S2CID  10398240 .
  • Schwarz, Benjamin; Debray, Saumya; Andrews, Gregory (2002). "Desmontaje de código ejecutable revisado". Actas de la novena conferencia de trabajo sobre ingeniería inversa (WCRE) . Departamento de Ciencias de la Computación, Universidad de Arizona : 45–54. CiteSeerX  10.1.1.85.6387 .

Enlaces externos [ editar ]

  • Lista de desensambladores x86 en Wikilibros
  • Wiki de transformación sobre el desmontaje
  • Boomerang Un descompilador general, de código abierto y reorientable de programas de código de máquina
  • Desmontadores en Curlie
  • Desensamblador en línea , un desensamblador en línea gratuito de armas, mips, ppc y código x86