Modo protegido, dolor de cabeza

Iniciado por lweb20, 4 Marzo 2013, 01:43 AM

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

lweb20

#20
Eternal:

Me sale este error en el VS:

1>user.cpp(39): error C2094: la etiqueta 'eip' no estaba definida

Y los archivos que contienen el código asm no contienen las direcciones de memoria.

Mas cuando obtengo la dirección de la función y pongo un breakpoint con el bochs "b 0xC0004330" (enter) y luego pongo c (enter) y la palabra reiniciar en mi commandline (enter) no se detiene.

EDIT:

¿Está bien usarlo de esta forma?:

long mem;

_asm mov eax, eip
_asm mov mem, eax

Eternal Idol

EIP es un registro, deberias verlo en el depurador, en el codig no podes usar mov (podes usar lea o hacer una llamadita):

http://stackoverflow.com/questions/4062403/how-to-check-the-eip-value-with-assembly-language

Igual si estas generando el Kernel con VC++ entonces hacete un favor y hace una version de depuracion (/Zi para el compilador /DEBUG para el depurador creo que era, fijate en Google o MSDN) o al menos genera los simbolos (.PDB), despues podes cargar en el WinDbg tu Kernel (con la opcion de carga dump) y con X ver todas las direcciones (son relativas a la base donde fue cargada asi que despues simplemente la sustraes y le sumas la base donde cargaste el Kernel).
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

~

Cita de: lweb20 en  4 Marzo 2013, 17:08 PM
Mmm. Amigo no lo tomes a mal, pero sobre el modo usuario sólo es una alternativa para aislar las aplicaciones normales del kernel. No estoy TAN (!) obsesionado con eso. Sé lo que me dices. Llevo meses con ese kernel y he estudiado la FAT como tu.
El hecho es que un modo usuario es más estorbo que algo de valor si no se acompaña de una buena multitarea, paginación, administración de memoria y permisos bien definidos, tanto de memoria, de software, como de puertos I/O.

Estoy intentando iniciar una discusión que pueda ayudarnos a todos. Quiero publicar código y discutir estándares. Está garantizado aprender más que los principiantes de OSDev de esta forma, dado que ni ahí se discute tan plenamente como estoy planteando. Hacer preguntas aisladas como las de estos errores jamás ha ayudado a un principiante. Cientos de principiantes con dudas más y menos complejas no han llegado a ningún lugar de esa forma, y simplemente han dejado de preguntar, uno y otro, y otro.

Este tema podría mantenerse vivo por años si se discute más que esos simples errores de dedo (yo también quiero divertirme ayudando sobre sistemas operativos que es una de las cosas que más me interesan, aprendiendo y haciendo que esto sea cada vez más fácil, con ayuda entre todos).

De lo contrario, si no hay interés en discutir a mayor nivel, puedo garantizar que este tema y el kernel del que hablamos no podrían normalmente durar ni 6 meses más, y mucho menos avanzar el código y el conocimiento de forma notable.





Si solamente son meses los que tiene el kernel pero sin ninguna otra base de experiencia anterior, es natural ver las cosas tan simplemente. Pero no es suficiente ni de cerca.

Yo tengo casi una década tratando de estudiar sobre sistemas operativos, y solo recientemente es que he comenzado realmente a poder desenvolverme y entender en todos los requerimientos, de forma más completa. Y los tutoriales y foros (OSDev, OSDever, Wikipedia, BrokenThorn, el tutorial de JamesM, y el resto de conocidos), no tienen suficiente información (solo hace falta buscar "¿qué efecto tiene cada registro de la VGA y cómo se programa?" para darse cuenta que la mejor información no está tan pública, y sin eso no se llega a ningún lado).

El hecho no es que haya estudiado la FAT. Yo entiendo la FAT12 hasta el nivel de leer el directorio raíz. ¿Este kernel actual tiene más capacidad que eso? Desde ahí se puede aprender mucho más.
Sitio web (si la siguiente imagen no aparece es porque está offline):

lweb20

#23
Ok gracias, suficiente por ahora. Más tarde continúo. Ahora lo extraño es que me parece* que tengo la dirección de memoria pero nunca se detiene (*me parece).

Más tarde o sino mañana hago pruebas y leo lo que me dices.

En cuanto a "~" admiro tu interés pero el modo usuario es útil. ¿Acaso crees que Windows sin modo usuario seguiría vivo? resultados: discos quemados (jeje), Microsoft hackeada, etc.

Edito:
- No planeo usar modo usuario hasta, como dices, dejar todo bien configurado.

CitarEl hecho no es que haya estudiado la FAT. Yo entiendo la FAT12 hasta el nivel de leer el directorio raíz. ¿Este kernel actual tiene más capacidad que eso? Desde ahí se puede aprender mucho más.
- El kernel tiene más que eso.

¿Haz revisado mi penúltimo post?

~

Cita de: lweb20 en  4 Marzo 2013, 17:38 PM
Ok gracias, suficiente por ahora. Más tarde continúo. Ahora lo extraño es que me parece* que tengo la dirección de memoria pero nunca se detiene (*me parece).

Más tarde o sino mañana hago pruebas y leo lo que me dices.

En cuanto a "~" admiro tu interés pero el modo usuario es útil. ¿Acaso crees que Windows sin modo usuario seguiría vivo? resultados: discos quemados (jeje), Microsoft hackeada, etc.

Edito:no planeo usar modo usuario hasta, como dices, dejar todo bien configurado.
El modo usuario es útil y necesario, pero no es lógico usarlo si no se acompaña de todo lo que realmente lo hace útil (memoria virtual, multitareas, )

Así que, dado que necesito entender primero el hardware de forma intrincada y que nedie más usa el sistema (es monotarea), lo mejor es comenzar en modo kernel puro, y desde ahí aprender.

El enfoque de tratar de implementar el modo usuario y después agregar código más complicado de kernel ya me ha fallado antes, y me ha hecho perder tiempo en reescribir código insostenible (todo el kernel se vuelve insostenible).

Ahora tengo mejores resultados porque voy desde el nivel más bajo, desde lo que realmente necesito para reemplazar a DOS, y desde ahí, cuando esté listo, voy a agregar el modo usuario (la misma progresión de DOS hasta Windows 3, Windows 9x y Windows NT).

Por lo menos este es mi estilo porque me doy tiempo de entender y no puedo equivocarme ni desperdiciar código si me baso en progresos simples pero comprobadamente correctos.
Sitio web (si la siguiente imagen no aparece es porque está offline):

lweb20

pm.

Edito:

Tengo implementado el GDT, IDT, PIC, PIT (lo básico). De ahí deriva los controladores de excepciones. Sistema multipantalla (yo lo inventé :P). Orientado a objetos.

Eternal Idol

Gracias, tratemos de no desviar el tema, como ya dije antes este no es el foro idoneo para desarrollo de Kernels o S.O., asi que por favor tratemos de centrarnos en las dudas concretas que se plantean.

Para publicar codigo, discutir standards y demas ya se citaron varios foros incluyendo el de uno de los usuarios que participa en el hilo.
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

lweb20

Cita de: Eternal Idol 7D en  4 Marzo 2013, 17:50 PM
Gracias, tratemos de no desviar el tema, como ya dije antes este no es el foro idoneo para desarrollo de Kernels o S.O., asi que por favor tratemos de centrarnos en las dudas concretas que se plantean.

Para publicar codigo, discutir standards y demas ya se citaron varios foros incluyendo el de uno de los usuarios que participa en el hilo.

Exacto. Ese es el problema de este foro. Pero está muy bien así ya que está más ordenado.

x64core

Disculpen pero tengo una pregunta razonable, @lweb20:
Como pensas crear ya sea un kernel o SO si nisiquiera sabes como programar en C/C++ y resolver problemas depurando?
me refiero a que para programar tal cosa no solo se necesita un nivel basico del conjunto de instrucciones y de C/C++.
Creo que primero se empieza con un calculadora no ? Bueno es solo pregunta.

lweb20

Cita de: x64Core en  4 Marzo 2013, 19:38 PM
Disculpen pero tengo una pregunta razonable, @lweb20:
Como pensas crear ya sea un kernel o SO si nisiquiera sabes como programar en C/C++ y resolver problemas depurando?
me refiero a que para programar tal cosa no solo se necesita un nivel basico del conjunto de instrucciones y de C/C++.
Creo que primero se empieza con un calculadora no ? Bueno es solo pregunta.


Sí sé programar en C pero obviamente no lo sé todo.