Saltar al contenido

¿Qué significa EIP?

Presta atención porque en esta noticia encontrarás la solución que buscas.Esta sección ha sido aprobado por nuestros especialistas para garantizar la calidad y exactitud de nuestro contenido.

Solución:

EIP es un registro en arquitecturas x86 (32 bits). Contiene el “Puntero de instrucción extendido” para la pila. En otras palabras, le dice a la computadora adónde ir a continuación para ejecutar el siguiente comando y controla el flujo de un programa.

Investigue el lenguaje ensamblador para comprender mejor cómo funcionan los registros. Skull Security tiene un buen manual.

Una de las cosas básicas de las que una computadora necesita realizar un seguimiento es dónde se encuentran en la memoria las instrucciones que se están ejecutando actualmente.

Esto normalmente lo hace el UPC utilizando lo que a menudo se conoce como Instruction Pointer o Program counter Registrarse. El nombre exacto depende de la arquitectura, pero el concepto se generaliza en todas las arquitecturas. Se llama el Puntero de instrucción sobre CPU de Intel, y ese es el término que usaré en esta respuesta.

El puntero de instrucción se incrementa continuamente mientras las instrucciones se ejecutan desde la memoria, y también se actualiza cada vez que se ejecuta una instrucción de salto de algún tipo (jmp, jle, etc.). Moderno UPC arquitecturas con múltiples tuberías de ejecución paralelas y múltiples núcleos hace que lo que realmente está sucediendo dentro del UPC más complejo, pero para un observador externo, la explicación simple es suficiente para comprender lo que está sucediendo y el propósito de los registros relevantes.

En virtud de lo viejo Intel 8086/8088, 80186 y 80286 ser 16 bits procesadores, el puntero de instrucción se expresa normalmente como un par de 16 bits valores conocidos como Code Segment (código selector en el 80286, pero excepto en el modo protegido, los selectores funcionan de manera muy similar a los segmentos) y el puntero de instrucción.

En el salón de ensambladores, CS:IP donde los dos puntos indican el emparejamiento de un segmento y un desplazamiento como un par para formar una dirección de memoria. CS y IP aquí están Registros de CPU – pequeñas ubicaciones de memoria dentro del propio chip de la CPU – en este caso particular cada 16 bits en tamaño.

Tu tambien tenias cosas como DS:DX cuál era convencionalmente la ubicación donde leer o escribir datos en la memoria; DS era segmento de datos y DX es un registro de propósito general que en este caso contenía el desplazamiento del segmento de datos. Originalmente había cuatro registros destinados a uso general, denominados AX, BX, CX y DX respectivamente, cada uno de los cuales podría abordarse en términos de la mitad alta: AH, por ejemplo – o la mitad baja – AL, además de una pequeña cantidad de registros de uso general que tenían usos previstos específicos. Las CPU modernas tienen muchos, muchos más registros, con docenas de registros que son comunes y más de cien no son desconocidos.

Al hacer el 80386 CPU a fines de la década de 1980, Intel realizó muchos cambios, incluida la extensión del espacio de direcciones a 32 bits manteniendo los selectores como concepto. Por esta razón, los antiguos valores de 16 bits ya no eran suficientes y el puntero de instrucción se amplió a 32 bits. Para mantener la compatibilidad total con versiones anteriores (en este punto, Intel probablemente había aprendido la lección del 80286 que era más compatible unidireccionalmente; era fácil pasar del 8086/8088‘s modo real en el 80286‘s modo protegido, pero regresar fue mucho más difícil, y esto resultó ser un problema en la práctica), esto requería un nuevo registro para que la CPU mantuviera el puntero de instrucción cuando operaba en modo de 32 bits.

En el 80386, el extendido (32 bits) los registros fueron nombrados Exx mientras que el correspondiente 16 bits Los registros se denominaron anteriormente como xx. Entonces obtendría, por ejemplo, el antiguo registro acumulador de 16 bits AX más el registro acumulador extendido de 32 bits EAX (con AX como el bajo 16 bits mitad). De acuerdo con esta convención de nomenclatura, los Puntero de instrucción extendido El registro se conoce como EIP.

Aparte, la mayoría de las veces, el valor correcto no es simplemente EIP, pero CS:EIP, porque el valor de EIP sigue siendo un compensar desde alguna ubicación de inicio que está definida por el selector de código.

EIP es un registro básico de ejecución de programas.

-Como objetivo de explotación, creo que pág. 81 del manual de Intel lo dice todo

No se puede acceder al registro EIP directamente mediante software; se controla implícitamente mediante instrucciones de transferencia de control (como JMP, Jcc, CALL y RET), interrupciones y excepciones. La única forma de leer el registro EIP es ejecutar una instrucción CALL y luego leer el valor del puntero de la instrucción de retorno de la pila de procedimientos. El registro EIP se puede cargar indirectamente modificando el valor de un puntero de instrucción de retorno en la pila de procedimientos y ejecutando una instrucción de retorno

Comprender el papel que desempeña EIP en la ejecución del programa parece simple pero complejo cuando se considera que la combinación del registro de segmento de código (CS) con EIP crea esta “dirección lógica” y debido a que todas las CPU x86 usan la captación previa, una instrucción leída desde el bus no lo hará. sea ​​lo que está en el registro EIP. La parte simple es que el valor en EIP se usa para determinar la ubicación de la siguiente instrucción, ya sea que esto lo envíe de regreso a una instrucción anterior o hacia adelante en un código de línea recta. Los resultados de lo que surgió en su instrucción anterior se almacenan en EAX.

-y en código benigno?

Bueno, siempre que su código ejecute un algoritmo o llame a una función, definitivamente hará uso de este registro.

Eres capaz de favorecer nuestra labor ejecutando un comentario o puntuándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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