Duda segmentos

Iniciado por cpu2, 23 Diciembre 2013, 06:54 AM

0 Miembros y 1 Visitante están viendo este tema.

cpu2

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.

Vaagish

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!

cpu2

Vale gracias.

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

Código (asm) [Seleccionar]
movq %cs:(%rsp), %rdi    ; 2e 48 8b 3c 24
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.