Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: xv0 en 23 Diciembre 2013, 06:54 am



Título: Duda segmentos
Publicado por: xv0 en 23 Diciembre 2013, 06:54 am
Bien, ayudando a otro usuario con otra duda aparecio el tema de los segmentos, ya sabia algo de ellos antes y leyendo los manuales mas aun, se que cada segmento tiene su funcion y algunos se concatenan con los registros.

Estaba haciendo pruebas en ring3, me fije de que todos los segmentos tienen el mismo valor menos el %cs, segun la formula que tiene la CPU para calcular los offset multiplica el valor del segmento por 16 y lo suma al offset, bien hice una prueba, %esp el stack esta concatenado con el segmento %ss, copie el contenido de %esp con el segmento %cs y el valor es el mismo que con %ss, a que se debe si %cs tiene otro valor que %ss?

Se que %esp va con %ss, pero la instruccion me la acepta y me creo otro opcode si la escribo con el %cs, bueno esa es la pregunta, se ignora y se calcula con %ss, porque apuntan al mismo offset.

Un saludo.


Título: Re: Duda segmentos
Publicado por: Vaagish en 26 Diciembre 2013, 17:14 pm
Me gustaría poder ayudarte, pero no llegue a eso aun.. comento para revivir el tema, a ver si alguien lo lee y sabe como funcionan esos registros..

Saludos!


Título: Re: Duda segmentos
Publicado por: xv0 en 27 Diciembre 2013, 11:49 am
Vale gracias.

Pues aqui dejo un ejemplo, el registro %cs vale 0x2b y el %ss 0x23.

Código
  1. movq %cs:(%rsp), %rdi    ; 2e 48 8b 3c 24
  2. movq %ss:(%rsp), %rdi   ; 48 8b 3c 24

Bueno el %ss no hace falta ponerlo, pero es para que no cree dudas, pero el valor es el mismo en ambos casos porque? Si tienes valores distintos tendria que apuntar en otra direccion no? Eso solo se respeta en ring0 o que?

Un saludo.