Puertos I/O

Iniciado por cpu2, 16 Mayo 2013, 15:17 PM

0 Miembros y 7 Visitantes están viendo este tema.

cpu2

Hola

Citarit0 at isa0 port 0x2e/2: IT8720F rev 8, EC port 0x228

Es el sensor de temperatura.

Tengo el siguiente código:

Código (asm) [Seleccionar]
movb $0x2e, %dl ; movw $0x228, %dx
in %dx, %eax


El resultado es un core dumped, que estoy haciendo mal?

Un saludo.


Eternal Idol

No tenes permisos, usa ioperm antes.
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

Además necesitarás darle permisos al proceso.

Saludos.
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

cpu2

Estoy utilizando openbsd, la función ioperm solo esta disponible en la arquitectura alpha, hay otra función llamada i386_set_ioperm, pero nada para la amd64.

¿Qué puedo hacer?

Un saludo.

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

cpu2

Cuando compilo me dice que no encuentra referencia ala función.

http://www.openbsd.org/cgi-bin/man.cgi?query=i386_set_ioperm&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

Incluyo todas la librerias y al compilar ese -li386.

¿Por qué root no puede acceder a los puertos directamente, sin utilizar esas funciones?

Un saludo.

Arkangel_0x7C5

Porque es parte de la proteccion de los niveles de ejecucion (Modo usuario y modo kernel)
Tendrias que darle permisos al proceso para poder usar los puertos I/O

Saludos

cpu2

Gracias por las respuestas, pero no puedo hacer nada porque no dispongo de ioperm.

Un saludo.

cpu2

Estoy intentando darle permisos desde ASM, leyendo los manuales me estoy enterando un poco de que va el tema, pero no hay manera de que funcione.

Tengo que tener CPL en 0 para poder acceder a la flag IOPL, con las instrucciones popf y iret, iret no funciona, y acceder ala base TSS que nose como acceder.

No encuentro ningun código ni nada, la verdad es que un ejemplo me ayudaría.
Por cierto estoy en long mode, el manual casi todo lo que dice es para virtual-8086.

Un saludo.

P.D: Perdón por el doble post.


Arkangel_0x7C5

lo primero, estas en modo kernel o ring0? si no lo estas, no vas a poder tocar nada de eso en asm

Saludos

cpu2

No, estoy en mode long.

Por lo que dices tengo que entrar en modo kernel, pero como?
Al igual que in y out ese iret tampoco puedo ejecutarlo, sera por los permisos.

Pero ahora tambien tengo otra duda, como se accede a la base TSS?

Un saludo.