De momento aquí os dejo una pequeña
tabla con instrucciones en lenguaje ensamblador sacada de diversos libros y paginas Web.
También una tabla de conversión ASCII – Hexadecimal. Para que toméis contacto con el Olly Debugger incluyo dos manuales (muy buenosmanuales, mirad la carpeta correspondiente a este capitulo) dePOPE No es necesario estudiar el lenguaje ensamblador, pero estaría bien que le echarais unvistazo por lo menos a las instrucciones de salto.
ENSAMBLADOR
Registros de la CPU
La CPU tiene 14 registros internos, cada uno de 16 bits. Los primeros cuatro,
AX, BX,CX, y DX son registros de uso general y también pueden ser utilizados como registros de 8 bits, para utilizarlos como tales es necesario referirse a ellos como por ejemplo: AH y AL, que son los bytes alto (high) y bajo (low) del registro AX. Esta nomenclatura es aplicable también a los registros BX, CX y DX. Los registros son conocidos por sus nombres específicos:
AX Acumulador
BX Registro base
CX Registro contador
DX Registro de datos
DS Registro del segmento de datos
ES Registro del segmento extra
SS Registro del segmento de pila
CS Registro del segmento de código
BP Registro de apuntadores base
SI Registro índice fuente
DI Registro índice destino
SP Registro del apuntador de la pila
IP Registro de apuntador de siguiente instrucción
F Registro de banderas
Instrucciones lógicas.
Son utilizadas para realizar operaciones lógicas sobre los operandos.
AND
NEG
NOT
OR
TEST
XOR
Instrucciones aritméticas.
Se usan para realizar operaciones aritméticas sobre los operandos.
ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB
Operaciones CALL y RET
La instrucción CALL transfiere el control a un procedimiento llamado, y la instrucción
RET
regresa del procedimiento llamado al procedimiento original que hizo la llamada. RET
debe ser la ultima instrucción en un procedimiento llamado. Los formatos generales para
CALL , RET son:
(etiqueta) CALL (procedimiento)
(etiqueta) RET (inmediato)
El código objeto particular que CALL y RET generan depende de si la operación implica un procedimiento NEAR (cercano) o un procedimiento FAR (lejano).
Instrucciones para ciclos
LOOP Transfieren el flujo del proceso, condicional o
incondicionalmente, a un destino repitiéndose esta acción hasta que el contador sea cero.
LOOP
LOOPE
LOOPNE
Instrucciones de conteo
Se utilizan para decrementar o incrementar el contenido de los contadores.
DEC
INC
Instrucciones de comparación
Son usadas para comparar operandos, afectan al contenido de las banderas.
CMP
CMPS (CMPSB) (CMPSW)
Instrucciones de banderas
Afectan directamente al contenido de las banderas.
CLC
CLD
CLI
CMC
STC
STD
STI
Instrucciones de salto
Son utilizadas para transferir el flujo del proceso al operando indicado.
JMP
JA (JNBE)
JAE (JNBE)
JB (JNAE)
JBE (JNA)
JE (JZ)
JNE (JNZ)
JG (JNLE)
JGE (JNL)
JL (JNGE)
JLE (JNG)
JC
JNC
JNO
JNP (JPO)
JNS
JO
JP (JPE)
JS
Instrucción JMP
Propósito: Salto incondicional
Sintaxis:
JMP destino
Esta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las
condiciones actuales de las banderas ni de los datos.
Instrucción JA (JNBE)
Propósito: Brinco condicional
Sintaxis:
JA Etiqueta
Después de una comparación este comando salta si está arriba o salta si no está abajo o si no es igual.
Esto significa que el salto se realiza solo si la bandera CF esta desactivada o si la
bandera ZF esta desactivada (que alguna de las dos sea igual a cero).
Instrucción JAE (JNB)
Propósito: salto condicional
Sintaxis:
JAE etiqueta
Salta si está arriba o si es igual o salta si no está abajo.
El salto se efectúa si CF esta desactivada.
Instrucción JB (JNAE)
Propósito: salto condicional
Sintaxis:
JB etiqueta
Salta si está abajo o salta si no está arriba o si no es igual.
Se efectúa el salto si CF esta activada.
Instrucción JBE (JNA)
Propósito: salto condicional
Sintaxis:
JBE etiqueta
Salta si está abajo o si es igual o salta si no está arriba.
El salto se efectúa si CF está activado o si ZF está activado (que cualquiera sea igual a
1).
Instrucción JE (JZ)
Propósito: salto condicional
Sintaxis:
JE etiqueta
Salta si es igual o salta si es cero.
El salto se realiza si ZF está activada.
Instrucción JNE (JNZ)
Propósito: salto condicional
Sintaxis:
JNE etiqueta
Salta si no es igual o salta si no es cero.
El salto se efectúa si ZF está desactivada.
Instrucción JG (JNLE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JG etiqueta
Salta si es más grande o salta si no es menor o igual.
El salto ocurre si ZF = 0 u OF = SF.
Instrucción JGE (JNL)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JGE etiqueta
Salta si es más grande o igual o salta si no es menor que.
El salto se realiza si SF = OF
Instrucción JL (JNGE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JL etiqueta
Salta si es menor que o salta si no es mayor o igual.
El salto se efectúa si SF es diferente a OF.
Instrucción JLE (JNG)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JLE etiqueta
Salta si es menor o igual o salta si no es más grande.
El salto se realiza si ZF = 1 o si SF es diferente a OF
Instrucción JC
Propósito: salto condicional, se toman en cuenta las banderas.
Sintaxis:
JC etiqueta
Salta si hay acarreo.
El salto se realiza si CF = 1
Instrucción JNC
Propósito: salto condicional, se toma en cuenta el estado de las banderas.
Sintaxis:
JNC etiqueta
Salta si no hay acarreo.
El salto se efectúa si CF = 0.
Instrucción JNO
Propósito: salto condicional, se toma en cuenta el estado de las banderas.
Sintaxis:
JNO etiqueta
Salta si no hay desbordamiento.
El salto se efectúa si OF = 0.
Instrucción JNP (JPO)
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JNP etiqueta
Salta si no hay paridad o salta si la paridad es non.
El salto ocurre si PF = 0.
Instrucción JNS
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JNP etiqueta
Salta si el signo esta desactivado.
El salto se efectúa si SF = 0.
Instrucción JO
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JO etiqueta
Salta si hay desbordamiento (overflow).
El salto se realiza si OF = 1.
Instrucción JP (JPE)
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JP etiqueta
Salta si hay paridad o salta si la paridad es par.
El salto se efectúa si PF = 1.
Instrucción JS
Propósito: salto condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JS etiqueta
Salta si el signo está prendido.
El salto se efectúa si SF = 1.
Instrucciones de transferencia
Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede
usar
con diferentes modos de direccionamiento.
MOV
MOVS (MOVSB) (MOVSW)
Instrucciones de carga
Son instrucciones específicas de los registros. Son usadas para cargar en algo en
registro
bytes o cadenas de bytes.
LODS (LODSB) (LODSW)
LAHF
LDS
LEA
LES
Instrucciones de la pila
Estas instrucciones permiten el uso de la pila para almacenar y extraer datos.
POP
POPF
PUSH
PUSHF
TABLA DE CONVERSION
Bueno espero que mientras leíais esta introducción estuvierais bajando el OllY, si es así
Para seguir el curso debe estar registradfo en la pagina gracias
podemos pasar al siguiente capitulo y empezar a trastear con el primer crackme.
|