Análisis de malware

Conceptos básicos de montaje

15 de agosto de por Richard Azú

Introducción

Este artículo brinda detalles sobre la programación ensambladora para el microprocesador Intel 8086. También presenta detalles muy claros al proporcionar casos de ejemplo, definiciones y explicaciones de sintaxis sobre instrucciones aritméticas, instrucciones lógicas y operandos.

¿Por qué estudiar este tema? Es importante comprender los conceptos básicos de arquitectura informática, lógica de chip y gestión de memoria. Las personas que se ocupan del malware también lo encontrarán útil. Independientemente del tipo de lenguaje de alto nivel que se utilice, antes de que el código se traduzca a código de máquina, primero se debe traducir al lenguaje ensamblador. Esto hace que el lenguaje ensamblador siga siendo importante a pesar de la evolución de los lenguajes de alto nivel.

lenguaje ensamblador

Un lenguaje ensamblador es un lenguaje de programación de bajo nivel diseñado para un tipo específico de procesador de hardware. Este lenguaje de bajo nivel se desarrolla utilizando mnemónicos. Antes de escribir un programa en lenguaje ensamblador, es necesario tener conocimientos suficientes del hardware del controlador o procesador.

1

2

La arquitectura del procesador 8086

Como se comenta en Elprocus , la arquitectura del microprocesador 8086 se basa en la computación de conjuntos de instrucciones complejas (CISC). Esto significa que el microprocesador tiene la capacidad de realizar operaciones de varios pasos o modos de direccionamiento dentro de un conjunto de instrucciones. CISC es un diseño de CPU en el que una instrucción realiza varios actos de bajo nivel, como el almacenamiento de memoria, la carga desde la memoria y una operación aritmética.

Registros

Para poder almacenar información (bajo diferentes valores y diferentes tamaños), cada procesador se compone de diferentes partes, «cajas», llamadas registros.

Sintaxis

ETIQUETA: INSTRUCCIÓN ; COMENTARIO

La etiqueta es solo un identificador de dirección.

Etiquetas

Se puede colocar una etiqueta al comienzo de una declaración. Durante el montaje, a la etiqueta se le asigna el valor actual del contador de ubicación activa y sirve como operando de instrucción.

Los comentarios comienzan con punto y coma (;) y no generan códigos de máquina. En otras palabras, no están traducidos.

3

Operandos

En lenguaje ensamblador, el operando es el valor sobre el cual opera el código de operación.

De la 3, AL y 4Dh son operandos.

El primer operando AL es el destino y el segundo operando 4Dh es la fuente.

Instrucciones aritméticas

Las instrucciones aritméticas para 8086 incluyen suma, resta, multiplicación, división, comparación, negación, incremento y decremento.

Durante la parte restante de este artículo, todas las instrucciones se ejecutarán utilizando el software EMU8086 versión 4.08.

4

5

6

En la 4, las instrucciones en las líneas 01 y 02 inicializaron los registros AX y BX con el valor de 01h. La siguiente instrucción sumó los valores en el registro AX y el registro BX, y luego almacenó el valor final en el registro AX.

La 5 muestra los bytes alto y bajo (AH y AL) del registro AX. Sus valores iniciales eran 0h antes de la operación aritmética.

La 6 muestra los bytes alto y bajo (AH y AL) del registro AX después de que se haya ejecutado la instrucción. La instrucción en la línea 01 de la 4 inicializó el registro AX con un valor de 01h. La instrucción en la línea 02 de la 4 inicializó el registro BX con un valor de 01h. El byte bajo del registro AX asume un valor final de 02h después de que se ejecutó la instrucción.

En el siguiente ejemplo de instrucción aritmética, inicializaremos los registros BX y CX con valores hexadecimales 4Dh y 30h respectivamente. La instrucción final agregará los valores en BX y CX y luego los almacenará en BX.

Analicemos las instrucciones antes de ejecutarlas en el emulador. BX toma el valor 4Dh, que equivale a 77 en decimal. CX toma el valor 30h, que equivale a 48 en decimal. La suma, 7Dh (125 en decimal), se almacena en BX.

7

8

9

Las capturas de pantalla de las Figuras 7 a 9 confirman el análisis que realizamos. El registro BX tiene el valor final 7Dh.

Instrucciones lógicas

El conjunto de instrucciones del procesador 8086 proporciona las instrucciones OR, TEST, AND, XOR y NOT de lógica booleana. La instrucción se puede utilizar para probar un bit cero y configurar o restablecer un bit según los requisitos de la instrucción.

La instrucción AND

La instrucción AND en 8086 realiza una operación AND bit a bit. La operación AND bit a bit devuelve 1 si los bits coincidentes de ambos operandos son 1; de lo contrario, devuelve 0. Veamos la tabla de verdad lógica de la operación AND.

10

Siguiendo la tabla de verdad de la 10, la instrucción AND sólo devolverá 1 si los bits de ambos operandos son 1.

Para esta práctica de laboratorio, usaremos la operación AND para borrar los bits de orden superior en el BX de 16 registros. Para lograr esto, inicializaremos BX con el valor binario 00000011 00001111b (3Fh o 63decimal). Siguiendo la tabla de verdad de la 10, solo necesitamos hacer AND BX con el valor 00000000 00001111b (0Fh o 15 decimal) para borrar sus bits de orden superior. Si la instrucción AND se ejecuta correctamente, BH debe configurarse en 0000 0000 y BL debe configurarse en 0000 1111.

11

12

13

14

Las figuras 11 a 14 confirman que la operación AND se ha ejecutado correctamente. El valor decimal en BX, como se muestra en la 14, es 15 (0Fh). Los bits de orden superior en el registro BH se han establecido en 0000 0000b y los bits de orden inferior no se ven afectados: 0000 1111b.

Conclusión

Este artículo explica la arquitectura de la computadora en referencia al hardware del microprocesador 8086. También ha brindado detalles finos sobre las instrucciones aritméticas y lógicas utilizadas en el procesador 8086, llegando incluso a examinar los valores iniciales en los registros y los valores finales después de ejecutar las instrucciones.

Como puede ver, el lenguaje ensamblador sigue siendo un lenguaje de programación relevante a pesar de la evolución de los lenguajes de alto nivel.

Fuentes

  1. ¿Cuál es la diferencia entre la arquitectura RISC y CISC ? Elprocus
  2. Manual de referencia del lenguaje ensamblador x86 , Oracle

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *