elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Puertos I/O
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Puertos I/O  (Leído 14,364 veces)
Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Puertos I/O
« Respuesta #10 en: 6 Junio 2013, 23:41 pm »

la direccion de los TSS se encuentra en la GDT que se obtiene con la instruccion SGDT.

Te explico, si estas arrancando bajo el SO. el procesador tiene varios modos de ejecucion a parte de los de modo largo y demas. Se les llama anillos de ejecucion. cuando arrancas estas en el anillo 0 (Modo Kernel) en el que puedes ejecutar todas las instrucciones que quieras. pero al cargar el SO carga las aplicaciones en el anillo 3 (Modo Usuario) que es el que menos permisos de ejecucion tiene

Saludos


En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Puertos I/O
« Respuesta #11 en: 7 Junio 2013, 06:12 am »

Vale, no puedo ejecutar esas instrucciones porque al comparar CPL dice que estoy en el anillo 3.
Así que no puedo hacer nada?

Pero ensamblando el código y hacer un módulo y compilarlo junto al kernel, no tendría que dar problemas no?
No tendría que añadir nada más solo el in?

Un saludo.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Puertos I/O
« Respuesta #12 en: 7 Junio 2013, 21:10 pm »

¿Probaste el primer resultado de openbsd ioperm en Google?

http://wiki.gudinna.com/200

En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Puertos I/O
« Respuesta #13 en: 7 Junio 2013, 22:32 pm »

¿Probaste el primer resultado de openbsd ioperm en Google?

http://wiki.gudinna.com/200



Ese código parece hacer referencia a llamadas específicas de la arquitectura i386; y él ya dijo que estaba usando un amd64 y no encontraba una equivalente para esta arquitectura.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Puertos I/O
« Respuesta #14 en: 8 Junio 2013, 14:20 pm »

Ese código parece hacer referencia a llamadas específicas de la arquitectura i386; y él ya dijo que estaba usando un amd64 y no encontraba una equivalente para esta arquitectura.

Saludos.

P.D: Probaré esa función en un i386 que tengo, ya os contaré como fue.

Por cierto, si no hay equivalente por algo sera.
« Última modificación: 8 Junio 2013, 14:23 pm por Eternal Idol 7D » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Puertos I/O
« Respuesta #15 en: 9 Junio 2013, 02:55 am »

Por cierto, si no hay equivalente por algo sera.

Exacto, hay esta el problema con la amd64.

Código:
http://old.nabble.com/remove-amd64-ioperm-td35476935.html

¿Probaste el primer resultado de openbsd ioperm en Google?

Quiero implementarlo en ASM, no quiero funciones escritas en C.

Del manual de AMD:

Citar
If the CPL is higher than IOPL, or the mode is virtual mode, IN checks the I/O permission bitmap in
the TSS before allowing access to the I/O port.

Si estoy en modo usuario, anillo 3, CPL es mayor que IOPL y por eso no tengo permisos para acceder al puerto, para eso tengo que utilizar ese bitmap del que habla el manual?
Al estar en modo kernel anillo 0, CPL no sería mayor que IOPL y tendría acceso a los puertos sin la necesidad de chequear el bitmap permission?

Un saludo y gracias a todos por el interés.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Puertos I/O
« Respuesta #16 en: 9 Junio 2013, 11:29 am »

Quiero implementarlo en ASM, no quiero funciones escritas en C.

Eso no representa ningun problema, desensambla el resultado en C y listo. Lo unico que hace es llamar a un servicio y seguramente es un int 0x80, un syscall/sysenter o lo que sea.

Si estoy en modo usuario, anillo 3, CPL es mayor que IOPL y por eso no tengo permisos para acceder al puerto, para eso tengo que utilizar ese bitmap del que habla el manual?
Al estar en modo kernel anillo 0, CPL no sería mayor que IOPL y tendría acceso a los puertos sin la necesidad de chequear el bitmap permission?

Un saludo y gracias a todos por el interés.


¿No hay otro servicio para obtener este dato? De ser asi yo que vos haria el parche, un modulo de modo Kernel no es un programa, es otro paradigma diferente.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Puertos I/O
« Respuesta #17 en: 9 Junio 2013, 23:44 pm »

Eso no representa ningun problema, desensambla el resultado en C y listo. Lo unico que hace es llamar a un servicio y seguramente es un int 0x80, un syscall/sysenter o lo que sea.

Ya no puedo usar ioperm, fue eliminado de la arquitectura amd64.

¿No hay otro servicio para obtener este dato? De ser asi yo que vos haria el parche, un modulo de modo Kernel no es un programa, es otro paradigma diferente.

Creo que no, si estoy en ring 3 tendré que acceder a ese bitmap tal y como dice el manual.

Un saludo.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Puertos I/O
« Respuesta #18 en: 10 Junio 2013, 10:28 am »

Ya no puedo usar ioperm, fue eliminado de la arquitectura amd64.

Por logica no es una buena idea que programas de modo Usuario accedan al hardware directamente, eso se hacia en la epoca en que no habia multitarea y la sincronizacion no era lo que es ahora. Es una lastima que no hayas dicho que pretendes hacer EXACTAMENTE desde el primer mensaje del hilo. ¿Es una prueba? ¿Es solo por verlo funcionar? ¿O prentedes hacer un software que se ejecute en produccion? Desde que mencionaste el parche asumo que es lo primero y para eso hacerlo en x86 es suficiente ... aunque tal vez lo queres para tu propio uso nada mas ... vaya uno a saber.

Creo que no, si estoy en ring 3 tendré que acceder a ese bitmap tal y como dice el manual.

Justamente si estas en modo Usuario no podes acceder, la gracia esta en que solo se puede acceder desde modo Kernel, asi es como se implementa la proteccion.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Puertos I/O
« Respuesta #19 en: 11 Junio 2013, 00:04 am »

Por logica no es una buena idea que programas de modo Usuario accedan al hardware directamente, eso se hacia en la epoca en que no habia multitarea y la sincronizacion no era lo que es ahora. Es una lastima que no hayas dicho que pretendes hacer EXACTAMENTE desde el primer mensaje del hilo. ¿Es una prueba? ¿Es solo por verlo funcionar? ¿O prentedes hacer un software que se ejecute en produccion? Desde que mencionaste el parche asumo que es lo primero y para eso hacerlo en x86 es suficiente ... aunque tal vez lo queres para tu propio uso nada mas ... vaya uno a saber.

Es un poco de todo, el código del primer mensaje del hilo no es más que una prueba, queria obtener la temperatura sin tener que utilizar systat sensors ni ninguna función escrita en C o interrupción, un ASM puro.

Las funciones como scanf o commandos como systat sensors, en algún momento tendrán que comunicarse con los puertos i/o, bueno más bien el núcleo, scanf con el teclado que es el predeterminado y systat sensors con el sensor de temperatura, mi idea era hacer mis propias funciones a medida de mi avancé.

Pero no puedo utilizar ese ioperm no fue implementado en amd64, no lo quiero hacer en el x86, esa funcion si puede dar permisos y yo desde ASM no, pues vaya.

Justamente si estas en modo Usuario no podes acceder, la gracia esta en que solo se puede acceder desde modo Kernel, asi es como se implementa la proteccion.

Si, tienes razón ya me he dado cuenta, ya se donde esta el I/O permission bitmap se encuentra en la TSS en el registro TR, devuelve 16 bytes, obtienes la dirección con la instrucción ltr:

Código
  1. pushq %rax
  2. pushq %rax
  3. movq %rsp, %rdi
  4. ltr (%rdi)

Ahora en teoria tendría que tocar el bitmap y volver a cargarlo en el registro TR.
Pero el resultado es un Bus error (core dumped) que hace referencia a la dirección de ltr. Bueno el manual lo deja bien claro.

Citar
This instruction must be executed in protected mode when the current privilege level is 0. It is only
provided for use by operating system software.

Así que la única forma de poder hacer lo que pretendo es en ring 0, o de un ioperm que no dispongo?

Un saludo.

En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Diferencias entre puertos del router y puertos del ordenador?
Redes
avmiitxe 4 6,729 Último mensaje 11 Septiembre 2011, 18:00 pm
por int_0x40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines