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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [SOLUCIONADO] Duda con acceso a UART mediante ensamblador.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Duda con acceso a UART mediante ensamblador.  (Leído 4,936 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
[SOLUCIONADO] Duda con acceso a UART mediante ensamblador.
« en: 2 Abril 2015, 19:49 pm »

Hola a todos.

Tengo que acceder a los registros de la UART del puerto com1 mediante ensamblador, trabajo con C++ builder en windows 98.

Lo primero que hago es conseguir la dirección del COM1 leyendo de la zona BIOS, consigo la dirección de memoria 0x3F8, que entiendo que es la dirección base de la UART del COM1.

Con esta dirección base, usando distintos desplazamientos, accederé a los registros de la UART, ¿es correcto?

Mi problema es que al intentar hacer esto, obtengo un error:
Código:
raised Exception class EAccessViolation with message 'Access violation at address 00401300. Read of address FFFFFFFF'
Esto es lo que he intentado:

Código:
[...]
asm{
    push es;
    mov ax, 3f8h;
    mov es, ax;          //ERROR
    mov ax, es:[0h]
}
[...]

También he intentado acceder a esa posición de memoria de más formas, usando el registro bx, escribiendo directamente la dirección (literal) pero no consigo acceder, siempre el mismo error:
Código:
raised Exception class EAccessViolation with message 'Access violation at address 00401300. Read of address FFFFFFFF'

  


« Última modificación: 3 Abril 2015, 18:56 pm por SARGE553413 » En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: Duda con acceso a UART mediante ensamblador.
« Respuesta #1 en: 2 Abril 2015, 20:16 pm »

Hola,

sinceramente a mi me aconsejaron usar ASM para procesos críticos dondo la velocidad fuera necesaría, así que imagino que es éste tu caso. Si no fuese yo tiraría de C++ y para delante de la siguiente forma.

Código:
#define p 0 				/* Puerto serial */
#undef import

void main() {

unsigned int c; /* 16 bits */
c = inport (p);
printf ("Palabra leida = %x\n",c);
}


En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Duda con acceso a UART mediante ensamblador.
« Respuesta #2 en: 2 Abril 2015, 20:25 pm »

Hola

Me parece que estas accedeciendo mal, puedes usar mejor las instrucciones in y out. Tambien te dejo esto:

http://bochs.sourceforge.net/techspec/PORTS.LST

Es una lista de ports y explica un poco las funciones, logico que tienes la explicacion desde 03F8-3FF.

Supongo que te ayudara en algo, si necesitas mas ayuda comenta.

Un saludo.
En línea

SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Duda con acceso a UART mediante ensamblador.
« Respuesta #3 en: 2 Abril 2015, 23:36 pm »

Lo que se me pide específicamente es acceder a los registros de la UART y mostrar/modificar su contenido, por eso debo hacerlo de esta manera. A menos que haya una mejor.
En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Duda con acceso a UART mediante ensamblador.
« Respuesta #4 en: 3 Abril 2015, 01:43 am »

Miraste lo que te pase?

Aqui tienes los registros de la UART:

http://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming#UART_Registers

Bien, y ahora que quieres hacer? Puedes escribir/leer con in y out.

Código
  1. in al, 0x3f8   ; lees
  2. out 0x3f8, al  ; envias, escribes

Un saludo.
En línea

SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Duda con acceso a UART mediante ensamblador.
« Respuesta #5 en: 3 Abril 2015, 18:55 pm »

Gracias por la respuesta, leí la info que me has indicado pero al ver que al principio hablaba de DMA seguí buscando por google. Pero si, efectivamente debo acceder a los registros con las instrucciones IN/OUT ya que de lo contrario estoy accediendo a zonas de memoria protegidas por el SO.

MI problema era que pensaba que IN/OUT tenía que servir solo para leer datos que te envían por el puerto serie o enviarlos tu, pero no configurarlo.

Gracias de nuevo, saludos.

En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: [SOLUCIONADO] Duda con acceso a UART mediante ensamblador.
« Respuesta #6 en: 3 Abril 2015, 20:54 pm »

Si pero te dije que es una lista, y tenias que buscar el port especifico.

Otra cosa mas, en que modo estas ejecutando el primer code, o en cual pretendes ejecutar todo esto?

Ya que haces referencia a la memoria protegida por el S.O, te lo pregunto por eso. Supongo que sabras que no puedes ejecutar eso en ring3, no?

Cualquier duda ya sabes.

Un saludo.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Acceso remoto mediante wifi
Hacking
La Muertع Blancα 7 7,376 Último mensaje 21 Mayo 2010, 22:30 pm
por Søra
[MOD] Acceso foro mediante XSS
Nivel Web
R33B0T 9 6,739 Último mensaje 16 Junio 2011, 20:27 pm
por .:UND3R:.
Acceso a internet (wifi) mediante Móvil. Duda sobre datos de registro.
Hacking Wireless
wifisn 4 4,364 Último mensaje 28 Noviembre 2011, 10:54 am
por wifisn
Restringir acceso mediante NAT
Redes
rede3 5 3,066 Último mensaje 19 Diciembre 2013, 18:08 pm
por Netlink
Como calcular el baud rate de un UART « 1 2 »
Ingeniería Inversa
4v1dy4 14 21,708 Último mensaje 7 Octubre 2023, 19:36 pm
por 4v1dy4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines