PDA

Ver la Versión Completa : Problemas con la Int 13h


carlocf
08-11-2005, 03:37:42
Saludos a todos Uds.

Agradeciendo sus comentarios y sobre todo la ayuda que me puedan brindar.

Nuevamente molestandolos con mis dudas, y es que en un anterior hilo ya habia comentado de mi interes por explorar los sectores dañados de un disco. Con la sugerencia de muchos de Uds. estoy tratando de trabajar Assembler desde Delphi, el cual ya me dio los primeros desafios. La verdad es que lo que hice en Assembler en el pasado, fue operaciones basicas...pero lo que ahora estoy intentando hacer, lo hago por primera vez. Para ponerlos al tanto les paso el codigo que me da pelea:


"Procedure PruebaCluster;
{Encargado de probar un cluster en un disco
utilizando codigo Assembler}
Var
bDLUnidad,bDHCara,bCHPista,bCLSector,bALNSectores,bResul:ShortInt;
Label
bOk,bErr;
Begin
//Asignamos los valores a ser revisados
bDLUnidad:=0; //Unidad A:
bDHCara:=0; //Cara 0
bCHPista:=3; //Pista 3
bCLSector:=7; //Sector 57
bALNSectores:=1;

Asm //Inicio del codigo assembler
Xor AX,AX //Ponemos a 0 el registro AX
Mov AH,4 //Verificar sectores
Mov DL,bDLUnidad
Mov DH,bDHCara
Mov CH,bCHPista
Mov CL,bCLSector
Mov AL,bALNSectores
Int 13h //Llamar a la Interrupcion 13
Jnc bOk //Saltar si no hay error
Mov bResul,1 //Si hay error
Jmp bErr //Saltar a error
bOk: Mov bResul,0 //No hay error
bErr: //Terminar
End;

Form1.txtResultado.Text:=IntToStr(bResul);
End;"

El problema que tengo es que al llegar a la linea "Int 13h" la pantalla se pone azul con el siguiente mensaje:

"Excepcion grave 0D en 0028:00002ABC en VXD VMM(01) +00001ABC"

Haciendo la ejecucion paso a paso..todo va de maravillas (es lo que creo)hasta la linea que les indico...

Por supuesto que las preguntas se viene a miles. Tengo por ayuda dos libros de ensamblador y dos de Delphi...pero el libro de Ensamblador, como es logico, solo trata de ensamblador y los de Delphi mencionan muy poco acerca de delphi y ensamblador...Asi que solo tengo buestra ayuda...para mis dudas. Estoy haciendo mis peripecias en una PII 400 mhz con Win98 SE, 64 MB de Ram. Estas son mis dudas:

1.- Es suficiente el codigo ensamblador que pongo, para lo que quiero hacer? (verificar un cluster si esta bien o mal es decir trabajar la Int 13 con la funcion 04 verificar sectores)

2.- De acuerdo al mensaje es un VXD el que esta dando lios..Sera por que estoy trabajando en Windows y este no deja acceder directamente al disco?.

Les pediria que me den luces sobre esta oscura duda y experiencia.

Mil gracias por su ayuda y por el tiempo que me brindan.

PD.
Disculpen por no usar las etiquetas

Atentamente
Carlo

marcoszorrilla
08-11-2005, 08:02:52
Pues acabo de hacer la prueba tecleando a mano el código en el Debug y me lee el disquete y no me da ningún error.

La bandera de acarreo sigue NC (Not Carry).

En cualquier caso hecho de menos PUSH y salvar los registros que se van a usar y finalizar con POP

Un Saludo.

carlocf
08-11-2005, 18:22:53
Pues acabo de hacer la prueba tecleando a mano el código en el Debug y me lee el disquete y no me da ningún error.

La bandera de acarreo sigue NC (Not Carry).

En cualquier caso hecho de menos PUSH y salvar los registros que se van a usar y finalizar con POP

Un Saludo.
Gracias por tu tiempo y tu ayuda...pero queria consultarte si haciendo la prueba en en delphi te genera algun error...de tal forma que puedo sospechar que el SO esta mal en la PC que estoy utilizando...Nuevamente mil gracias por tu ayuda

Atentamente Carlo

marcoszorrilla
08-11-2005, 19:44:07
Esta mañana hice la prueba con W98 y ahora acabo de hacerla con XP profesional funciona correctamente si introduzco la sentencias en el Debug desde el DOS.

Debug
A 100
Xor Ax,Ax
Etcétera,

pero si hago la prueba desde Delphi me reporta un error, por el momento no sé por qué.

Un Saludo.

marcoszorrilla
08-11-2005, 20:12:51
Pues me estoy temiendo lo peor, acabo de ver por distintas páginas muchos ejemplos de Ensamblador en Delphi y se ejecuta prácticamente todo el juego de instrucciones, pero ninguna de ellas ejecutaba interrupciones, como por ejemplo la 21H no tan peligrosa como la 13H, por lo que de momento pienso que esté prohibidio la ejecución de interrupciones????

Un Saludo.

Casimiro Notevi
08-11-2005, 20:40:18
Pues me estoy temiendo lo peor, acabo de ver por distintas páginas muchos ejemplos de Ensamblador en Delphi y se ejecuta prácticamente todo el juego de instrucciones, pero ninguna de ellas ejecutaba interrupciones, como por ejemplo la 21H no tan peligrosa como la 13H, por lo que de momento pienso que esté prohibidio la ejecución de interrupciones????
Un Saludo.

Tengo entendido que es así, que windows tiene prohibido el acceso directo mediante interrupciones "por motivos de seguridad" :eek:

carlocf
09-11-2005, 02:01:16
Tengo entendido que es así, que windows tiene prohibido el acceso directo mediante interrupciones "por motivos de seguridad" :eek:
Nuevamente mil gracias por la ayuda que me prestan y por el tiempo que se dan..muchas gracias.

De acuerdo al comentario que me dan creo que la pendiente se hace un poco mas inclinada. Pero creo que el final sera mas grato...

En el link que les muestro lineas mas abajo encontre un articulo que trata del acceso direto a discos...pero la verdad que el codigo me parece C++ usando las estructuras propias de Windows.

Buscando por la red encontre este link..
http://support.microsoft.com/default.aspx?scid=kb;es;137176
imagino que el codigo esta en C++.

Podre utilizar Delphi para crear un VXD? ya que creo que por ahi es el camino ojala que no...pero a estas alturas...me di cuenta que solo se ....que nada se...

Gracias por los comentarios que puedan alcanzarme acerca de esta pagina

Atentamente
Carlo

carlocf
09-11-2005, 03:28:43
Saludos a todos Uds....gracias por el tiempo que se toman al leer mis mensajes....

Me veo frustrado por que una operacion simple de acceso a disco se me hace mas complicado...de lo que pense....entre las muchos pensamientos que tengo....se me ocurrio esta...Existen muchos virus que ingresan a Windows....muchos de ellos pueden infectar el boot de algun diskette que se encuentre en la disketera....ahora eso pasa por hacer uso de Interrupciones....creo que a estas alturas debo pensar en codigo que le saque la vuelta a a Windows para poder usar las Int. en otras palabras usar tecnicas viricas?....es decir mas investigacion....(y esto como broma....conocen de algun sitio para crear virus en delphi y que me enseñe a usar Int para acceder al disco de tal forma que Wndows o se de cuenta???)....

Gracias por la ayuda estimados amigos del foro..

Atentamente
Carlo

roman
09-11-2005, 04:07:23
Podre utilizar Delphi para crear un VXD? ya que creo que por ahi es el camino ojala que no

Ojala que no, porque, hasta donde recuerdo, VXD es de las (muy) pocas cosas que no pueden hacerse con Delphi.

Esta es una categórica respuesta de Nick Hodges en los foros de Borland:


hi , is there anyone could tell me how to use delphi to build a vxd ?
or delphi could not build vxd?

NH:
The Delphi compiler will only build exe's and dll's.

What about OCX's?

NH:
OCX's are really DLL's.

How about control panel applets ?

NH:
Those are all DLL's.


// Saludos

carlocf
09-11-2005, 17:03:53
Ojala que no, porque, hasta donde recuerdo, VXD es de las (muy) pocas cosas que no pueden hacerse con Delphi.

Esta es una categórica respuesta de Nick Hodges en los foros de Borland:



// Saludos
Saludos nuevamente...

Por lo expuesto...:( sobre todo por Roman....al no poder crear un VXD como podria acceder desde Delphi a las Int del BIOS? si tienen alguna idea les agradeceria mucho las sugerencias que me hagan....

Atentamente
Carlo

carlocf
01-04-2008, 15:24:41
Saludos, casi despues de dos años les comento como resolvi mi problema. Definitivamente usando Delphi con codigo ASM no puedo acceder a la INT 13 pero probando descubri que PASCAL para windows si lo hace. Asi que introduje el codigo en PASCAL y este a su vez escribe un archivo txt en el disco. Desde Delphi llamo al EXE y luego leo el resultado en el txt. Solo de esta forma pude saltarme el ring0 de Windows que no deja acceder a las Interrupciones.

Saludos Amigos

Ñuño Martínez
02-04-2008, 09:55:49
Solo de esta forma pude saltarme el ring0 de Windows que no deja acceder a las Interrupciones. Un poco fuera de tema, pero esta frase demuestra la calidad de Windows.

Una preguntita, ¿ese PASCAL para Windows es este (http://www.freepascal.org/) o es otro?

Casimiro Notevi
02-04-2008, 11:47:27
Un poco fuera de tema, pero esta frase demuestra la calidad de Windows.[..]

Justo en eso estaba pensando, pero me he contenido porque luego me tildan de fanático, radical y algunas cosas más :D:D:D

cHackAll
02-04-2008, 15:47:27
Un poco fuera de tema, pero esta frase demuestra la calidad de Windows.

Una preguntita, ¿ese PASCAL para Windows es este (http://www.freepascal.org/) o es otro?

Creo que esta hablando de Turbo Pascal para DOS.

Justo en eso estaba pensando, pero me he contenido porque luego me tildan de fanático, radical y algunas cosas más :D:D:D

Fanático no; realista. Pero ni Güindos, ni Linux se salvan ante unas "manos" habilidosas.

Saludos