Registros

Registros:

son elementos de datos contenidos en el procesador se utilizan para falicitar el procesado de las instrucciones, almacenan datos con la ventaja de la rapidez de acceso para la ejecucion del programa.
existen varios tipos de registros como son los de uso generales, de base , de indice ,de puntero y de segmento.

generales: 

EAX: (acumulador) : es un registro de uso general y ademas de ser de uso general es utilizado en algunas instrucciones como multiplicar , dividir , utilizado para realizar calculos y tambien se utiliza para contener el valor de retorno despues de la ejecucion de una API.
 
y como habia explicado en la entrada anterior otra definicion de registro es :

EAX ((Extended Accumulator Register); almacena  el valor de retorno de una función , se usa como contenedor, es un registro volatil ya que su valor no es almacenado aunque establezca el valor de una función.

EBX (BASE): es un  registro de uso general , tambien se utiliza para direccionar el acceso a datos situados en la memoria .

EBX (Extended base register) : se utiliza para acelerar el calculo de las operaciones.

ECX ( CONTADOR): se usa como contador de diferentes intrucciones como por ejemplo un bucle 

ECX(extended counter register): contador volatir se usa para contador de bucle o contenedor de parámetros que se pases a funciones .

EDX (DATOS ) :se utiliza junto con eax para formar numeros mayores de 32 bits  en algunas instrucciones como la de multiplicar y dividir tambien se utilizan en operaciones de entrada y salida.

EDX (extended data register): registro volatir usado como parámetro de funciones se usa para almacenar parámetros a corto plazo dentro de una función.

pero estos registros tambien tienen subregistros de 16 y 8 y 8 bits  hay que tener en cuenta que estos registros son de 32 bits.


Registros de base:

EBX:  que tambien es de uso general  

EBP: se utiliza para direccionarr el acceso a los datos que estan dentro del espacio ocupado en la pila o stack . apunta a  los datos situados en la memoria.

EBP: (extended base pointer): registro no volatir , puede ser un registro o puede ser el puntero al marco de  pila .

que  a su vez cuenta con un subregistro :


Registros de indice:

se utilizan para acceder a `posiciones en la memoria que funcionan como origen y destino .

ESI: apunta a la direccion de origen 
ESI:( extended source index) : registro no volatir usado mayormente como puntero , usando para funciones que llevan origen y destino para los datos apuntando siempre al origen .

que tambien tiene un subregistro de 16 bits  SI = S = (source= origen) 

EDI: apunta a la direccion de destino.
EDI: (extended destination index ): es no volatir al igual que ESI solo que este apunta siempre al destino .
que tambien tiene un subregistro de 16 bits DI = D (destino) .






Registros de puntero:

ESP: apunta a la direccion del ultimo valor de la pila  osea el primero que podriamos sacar 
ESP: ( extended stak pointer) : almacena puntero en la parte inferior de la pila tras ejecutar una funcion al valor que tenia el registro .

con el subregistro de 16 bits 
EIP (Extended Instruction Pointer):  Contiene la direccion de memoria donde empieza la próxima instrucción a ejecutar, a no ser que se produzca un salto o una llamada a subrutina (función).




  • división de los registros:

  • 8 registros de 32 bits: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP EIP
  • 8 registros de 16 bits: AX, BX, CX, DX, SI, DI, BP, SP, IP
  • 8 registros de 8 bits: AH, AL, BH, BL, CH, CL, DH, DL


Registros de segmento:

 Un segmento es un área especial en un programa que inicia en un límite de un párrafo, esto es, en una localidad de regularmente divisible entre 16, o 10 hexadecimal

los registros de segmento son 6 : CS,DS,SS,ES,FS,Y GS.


Registros:

EIP: como podemos ver nos esta apuntando en la dirección en la que estamos a medida que nos movamos EIP siempre estará apuntando a la dirección que estemos en el desensamblado. 






ESP: siempre nos apuntara a la parte superior de la pila 






las flags: es un registro de 16 bits lo cual 9 sirven para indicar el estado de la maquina y el resultado del procesamiento .



OF:( desbordamiento de memoria) : se activa cuando en la operaciones el resultado cambia de signo dando un valor incorrecto . 

- • La suma de dos números con igual signo o la resta de dos números con signo opuesto producen un resultado que no se puede guardar (más de 16 bits). 
• El bit más significativo (el signo) del operando ha cambiado durante una operación de desplazamiento aritmético. 
• El resultado de una operación de división produce un cociente que no cabe en el registro de resultado.

ejemplo: 

el programa funciona así normal. 

vamos a cambiar el valor de EAX por 8000000 que es el valor negativo y de instrucciones añadir SUB que es resta EAX 1 , que seria al valor negativo restarle 1 pasando a positivo                        

para editar el valor de EAX damos 2 click izquierdo y en expresión colocamos el valor y para modificar eax presionamos 2 veces en el valor que tenia y lo modificamos por el valor que queramos añadir cuando presionamos F7 vemos como cambia OF y se enciende valiendo 1 mas adelante estaremos hablando de los valores.


                                               
PF (paridad): vale 1 si el resultado de la operación tiene como resultado un número con un número par de bits a 1. Se usa principalmente en transmisión de datos.    
 ejemplo :
1010, o 1100 o 1111000 que tienen resultados cuando la  cantidad de 1 total es par.


                                    
aqui vemos que EIP esta en 00401003 cuando apretamos f7 se movio a esa direccion lo que haremos es dar click derecho y seleccionar modificar valor en el registro EIP le damos a aceptar y veremos que encendera la bandera .




estamos observando como encendió la bandera .
 pero cambiemos de valor eax haciéndolo con el valor de 0000000 sumándole 2 que seria el paso anterior click derecho 2 veces a donde esta apuntando eax que es 00401000 y en eax 2 click y añadiendo solo 0

haciendo uso de lo que sabemos como estamos modificando el valor de eax directamente de añadir solo 0000000 y a ese valor sumar 2 en el registro cambia a 00000002  y como vemos FP se apago al darle a F7 EIP se movió a la siguiente dirección que seria 0041003 .

si nos fijamos en la segunda instrucción a medida que vayamos apuntando a EIP este aumentara 1 en el valor de eax .


cada vez que desde EIP apuntemos a 00401000 aumentara uno aqui vemos que vale 0000002
y que PF esta en 0


pero que sucederá cuando volvamos a hacer que EIP apunte nuevamente a la dirección inicial que suma 1 a EAX .
vemos que EAX incremente su valor a 0000003 y que PF volvió a encender ahora veamos por que sucede eso .

lo primero es agarra la calculadora y ponerla en modo programador trabajamos en hexadecimal. de hexadecimal a binario entonces en la calculadora cuando ponemos 2 que vemos cual es el valor binario .

vemos que 2 no coinciden con lo necesario para que paridad se encienda por que es 10 hay que poner la calculadora en hexadecimal ahora veamos que pasa cuando modificamos y ponemos el 3 .

vemos que si hay paridad ya que vemos 11 por eso cuando EAX cambio a 3 encendió pueden ir practicando para ir entendiendo mejor como funciona. 

ZF:  (indicador de cero) vale 1 cuando el resultado de una operación es cero.

EJEMPLO:

vamos a cambiar el valor de EAX  a FFFFFFF que en decimal es -1 como ven en el cuadro pueden comprobar todo eso con la calculadora.


 le damos click derecho y hacemos que EIP apunte a la direccion de EAX que 00401000 y vemos como despues de pulsar f7 cambia el valor a 0000000y en enciende ZF por que pasa eso por que el valor que le asignamos en el registro fue -1 y add eax, 0x1 es un numero positivo entonces seria -1+1.

pasaría lo mismo como que cambiamos el valor de eax a 8000000 que es negativo y sub significa restar y le restemos el mismo valor cuando apunte EIP que presionemos f7 su valor sera 0 y encenderá la bandera .

SF : (indicador de signo) solo tiene sentido en las operaciones con signo. Vale 1 cuando en una de estas operaciones el signo del resultado es negativo. 

ejemplo:



cambiamos el valor de EAX  a FFFFFF8 que seria -8 y tenemos el add eax 1 que es un numero positivo le damos a aceptar y hacemos que EIP apunte a la dirección 00401000 y cuando le damos a F7 .


vemos que suma y cambia el valor a  FFFFFF9 pero el valor del signo realizo fue una resta 

por que subió a 9 por que en el add eax tenemos la condición que cada vez que retorne a eax aumentara uno pero si comprobamos -8 + 1 realiza una resta que seria -7 .

CF (bit de acarreo) vale 1 si se produce acarreo en una operación de suma, o acarreo negativo en una operación de resta. Contiene el bit que ha sido desplazado o rotado fuera de un registro o posición de memoria. Refleja el resultado de una comparación. 


ejemplo: 



como podemos ver añadimos valores de mas que fue FFFFFFFF 8 f aplicamos ese valor a EAX y cuando hicimos que EIP apuntara a la dirección de EAX se activo la bandera por que  se activa cuando se excede del máximo de valor .


AF:  (acarreo auxiliar) vale 1 cuando se produce acarreo o acarreo negativo en el bit 3

TF :  (modo traza) indica al procesador que la ejecución es paso a paso. Se usa en la fase de depuración.

estas son las flags básicas y que mas utilizaremos mas adelante les dare un ejemplo de las demas para que puedan entenderlas .





Comentarios

  1. Casino - DrmCDC
    Find 이천 출장샵 out how to deposit and withdraw funds from 과천 출장안마 a casino. Use our link to get a bonus! 남양주 출장마사지 All 양산 출장마사지 casino bonuses listed on the casino list have 제천 출장샵 been in use since 2014.

    ResponderEliminar
  2. Alguien con ganas de dar clases particulares: https://chat.whatsapp.com/G7f6botLuv35fflTVWlLZ3

    ResponderEliminar

Publicar un comentario

Entradas populares