iNSTRuCCioNeS BaSiCaS De eNSaMBLaDoR
En este apartado os presentare unas cuantas instrucciones básicas de ensamblador. No espereis saber programar en este lenguaje con lo que os voy a presentar (para ello debereis seguir otros tutoriales, como los que estoy haciendo yo y que podras encontrar en mi web, ;-)), esto tan solo es una pequeña ayuda para que entendais como funciona un programa y no os perdais en el codigo. Para ello empezare con los diferentes tipos de saltos que existen en Ensamblador (Asm de ahora en adelante).
Empezaremos diciendo que en ensamblador no existen las instrucciones IF (bueno, si que existen pero no con la misma utilidad que tienes para lenguajes de alto nivel como C), FOR, WHILE ... en sustitucion a esto, existen todo tipo de saltos condicionales. Por ejemplo:
mov ax,05 <-- AX = 5
mov bx,06 <-- BX = 6
cmp ax,bx <-- Compara AX com BX
je Bien <-- JE (Jump if Equal) Salta a "Bien" si AX y BX son iguales
[Mal] <-- Si son diferentes, continua con la siguiente instruccion
Despues de esto os presentare una serie de saltos:
JA |
Salto si esta encima de |
JAE |
Salto si esta encima de o igual |
JB |
Salto si debajo de |
JBE |
Salto si debajo de o igual |
JC |
Salto si lleva (acarreo) |
JCXZ |
Salto si CX = 0 |
JECXZ |
Salto si ECX = 0 |
JE |
Salto si igual |
JG |
Salto si mayor |
JGE |
Salto si mayor o igual |
JL |
Salto si menor |
JLE |
Salto si menor o igual |
JNA |
Salto si no encima de |
JNAE |
Salto si no encima de o igual |
JNC |
Salto si no hay acarreo |
JNE |
Salto si no igual |
JNG |
Salto si no mayor |
JNGE |
Salto si no mayor o igual |
JNL |
Salto si no menor |
JNLE |
Salto si no menor o igual |
JNO |
Salto si no Overflow (dividido entre 0) |
JNP |
Salto si no paridad |
JNS |
Salto si no signo (es decir igual a cero) |
JNZ |
Salto si no es cero |
JO |
Salto si Overflow |
JP |
Salto si paridad |
JPE |
Salto si la paridad es igual |
JPO |
Salto si la parida es impar |
JS |
Salto si hay signo |
JZ |
Salto si es cero |
JMP |
Salto incondicional (es decir salta siempre) |
Bueno esta es la lista (creo que completa) de los salto que existen en ensamblador. Ya es hora de que vayamos a por los registros básicos:
Los registros
internos son 14, cuyos Bits se numeran de derecha a izquierda, siendo
0 el Bit menos significativo. Los registros que ahora indico son los
de 16 bits, para los registros de 32 bits (los usados hoy en dia)
debemos poner una "E" delante.
Registros
de Datos
AX (EAX) =
Acumulador. Registro principalutilizado en la instruccuiones
aritméticas
BX (EBX) = Base. Se usa para indicar un desplazamiento (Offset)
CX (ECX) = Contador. Se utiliza como contador en los bucles y en operaciones repetitivas
DX (EDX) = Dato. Se usa también en operaciones aritméticas
Registros
de Segmentos
CS = Registro de
segmento de código (Code Segment). Contiene la dirección
del segmento de código
DS = Registro de segmento de datos (Data Segment). Contiene la dirección del segmento de datos
SS = Registro de segmento de pila (Stak Segment). Contiene la dirección del segmento de pila
ES = Registro de segmento extra (Extra Segment). Contiene la dirección del segmento extra
Registros
Punteros de la Pila
SP (ESP) = Puntero de la pila (Stak Pointer) Contiene la dirección relativa al segmento de la pila
BP (EBP) = Puntero base (Base Pointer) Se usa para fijar el puntero de la pila
Registro
de Instrucción
IP (EIP) = Puntero de Instrucción (Instructuion Pointer). También llamado contador de programa. Contiene el desplazamiento de la instrucción siguiente a ejecutar respecto al segmento de código del programa en ejecución. Unido a CS (CS:IP) indica la dirección completa de la siguiente instrucción a ejecutar.
Despues de esto
tenemos los registros de banderas:
Registro
de Banderas
(de
estado)
CF = Bandera de Acarreo (Carry Flag) Indica el acarreo en intrucciones aritméticas
OF = Bandera de desbordamiento (Overflow Flag)
ZF = Bandera de resultado cero o comparación igual (Zero Flag)
SF = Bandera de resultado o comparación negativa (Sign Falg)
PF = Bandera de paridad (Parity Falg)
AF = Bandera auziliar (Auxiliar Falg)
Registro
de Banderas (de control)
DF = Bandera de dirección (Direction Flag)
IF = Bandera de interrupciones (Interrupt Flag)
TF = Bandera de atrape (Trap Flag) Controla la operación modo paso a paso
Debemos indicar
que los registros de datos poseen dos "partes" (por asi
decirlo). La parte alta (High) y la parte baja (Low) por ello pueden
ser divididos asi:
AX = AH (High) + AL (Low)
Si AX es de 16 bits, AH es de 8 bits y AL tambien de 8 Bits, pero si es EAX (32 Bits), logicamente AH y AL seran de 16 Bits cada una.
Se
que esta introduccion de Ensamblador es un poco floja pero creo que
es suficiente para defenderte algo en el cracking, si quereis saber
mas mirad en la seccion de "Direcciones a tener en cuenta".