elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 01:23  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Direccion Hrdware
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Direccion Hrdware  (Leído 952 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 848


BCN CITY


Ver Perfil
Direccion Hrdware
« en: 28 Abril 2011, 12:38 »

Hola que tal,nose si esto va aqui,la pregunta es clara,como puedo saber la direcicon de memoria de cada periferico del PC para Escribir/Leer mediante programacion ?¿ (En este caso ASM)


En línea
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 298



Ver Perfil
Re: Direccion Hrdware
« Respuesta #1 en: 29 Abril 2011, 14:32 »

puedes hacerlo de 2 maneras, preguntándole al SO o enumerando los dispositivos conectados al bus-PCI y USB

La primera depende del SO en el que estés, con la otra es cuestion de usar las instrucciones in out para comunicarte con el Hardware


En línea

Riki_89D


Desconectado Desconectado

Mensajes: 848


BCN CITY


Ver Perfil
Re: Direccion Hrdware
« Respuesta #2 en: 29 Abril 2011, 15:02 »

Hola mil gracias :) me decantare por la segunda,pero me porias explicar un poco mejor,que debo ir probando con IN y OUT?¿ :S,y por cierto hace un tiempo pregunte como acceder al Mouse cuano se esta booteando,pense que se aria desde el BIOS y efectivamente,encontre ayer la interrupcion 15h y la funcion c2h (creo),pero una persona me dijo,no se usan la int del BIOS,se accede al hardware directamente con IN y OUT,es eso cierto ?¿


saludos y mil gracias  :)
En línea
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 298



Ver Perfil
Re: Direccion Hrdware
« Respuesta #3 en: 29 Abril 2011, 20:17 »

yo solo se lo del PCI, que te servira para la mayorria del hardware.

Al hardware se le suelen asignar unas direcciones de I/O o tambin de memria. pueden ser estáticas o variar.

Se enumeran asi:
Código
#define outb(port,value) \
__asm__ __volatile__("outb %%al,%%dx"::"a" (value),"d" (port))

 
#define inb(port) ({\
unsigned char _v; \
__asm__ __volatile__ ("inb %%dx,%%al":"=a" (_v):"d" (port)); \
_v; \
})

#define outw(port,value) \
__asm__ __volatile__("outw %%ax,%%dx"::"a" (value),"d" (port))

 
#define inw(port) ({\
unsigned short _v; \
__asm__ __volatile__ ("inw %%dx,%%ax":"=a" (_v):"d" (port)); \
_v; \
})

#define outd(port,value) \
__asm__ __volatile__("outl %%eax,%%dx"::"a" (value),"d" (port))

 
#define ind(port) ({\
unsigned long _v; \
__asm__ __volatile__ ("inl %%dx,%%eax":"=a" (_v):"d" (port)); \
_v; \
})

 
#define PCI_CONFIG_ADDRESS 0xCF8
#define PCI_CONFIG_DATA 0xCFC
//Las direcciones del espacio PCI estan compuestas de esta manera
typedef struct PCI_ADDRESS{
union {
struct {
unsigned long zero:2;
unsigned long Registro:6;//Numero de registro del espacio PCI de un dispositivo
unsigned long Funtion:3;
unsigned long Device:5;
unsigned long Bus:8;
unsigned long Reserved:7;
unsigned long Enable:1;
}flag;
unsigned long ADDRESS;
};
}PCI_ADDRESS;
typedef struct HARDWARE_ID{
union{
struct {
unsigned long vendor;
unsigned long device;
};
unsigned long id;
};
}HARDWARE_ID;
 
 
void PCI_Enum(){
PCI_ADDRESS Addr;
HARDWARE_ID ID;
Addr.ADDRESS = 0;
ID.id = 0;
Addr.flag.Enable = 1;
 
for(short bus = 0;bus<256;bus++){//Busca en un numero de bus los dispositivos, hay 256 posibles
//Cada bus tiene al menos un dispositivo y 32 de maximo
for(short dev = 0;dev<32;dev++){//Busca en un bus los dispositivos
//Cada dispositivo puede tener una o hasta 8 funciones diferentes
for(int fun = 0;fun<8;fun++){//La funcion 0 siempre estara disponible, sino el dispositivo no esta
Addr.flag.Funtion = fun;
Addr.flag.Device = dev;
Addr.flag.Bus = bus;
 
outd(PCI_CONFIG_ADDRESS,Addr.ADDRESS);
ID.id = ind(PCI_CONFIG_DATA);
if(!(ID.vendor+1)){//Si el vendor es 0xFFFF significa que esa funcion no esta presente
if(!fun)break;
}else{
printf("Detected: PCI\VEND_%X04&DEV_%X04\n",ID.vendor, ID.device);
};
}
};
}
 
};
 
 
busca en esta pagina lo que necesites: http://wiki.osdev.org/PCI#Configuration_Space
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Dirección IP
Dudas Generales
mondma 11 1,847 Último mensaje 22 Marzo 2004, 22:44
por 4D1cTo
DIRECCION IP
Redes
LUISITO 1 507 Último mensaje 30 Abril 2004, 05:59
por el-brujo
Direccion IP.
Redes
LUISITO 3 845 Último mensaje 1 Mayo 2004, 08:45
por Ambolius
Direccion IP y direccion fisica del PC
Dudas Generales
abaxerias89 6 2,130 Último mensaje 12 Agosto 2006, 10:20
por Neobius
Quiero averiguar la direccion fisica MAC sabiendo la direccion IP, se puede?
Hacking Básico
redcat 7 3,084 Último mensaje 19 Julio 2007, 17:53
por cker
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines