Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: lweb20 en 2 Septiembre 2012, 04:53 am



Título: Bootloader 32-bit y segmentación
Publicado por: lweb20 en 2 Septiembre 2012, 04:53 am
Buenas.

Les cuento que hace un tiempo comencé a aprender asm (assembly) por motivos que me pareció bastante interesante poder decirle a la computadora lo que quería y esta lo hacía sin ningún límite :o, así que como los sistemas de 32-bit como windows (por cierto tengo win8 de 64bits que no me deja hacer mucho...) y linux estaban limitados quise hacer un programa que corriera al inicio de la computadora, que muestre un mensaje y algo más... ;)

Bueno la cosa es que estuve a full averiguando ;-), imprimiendo manuales completos de asm.. y bueno he aprendido varias cosas pero existen algunos temas que no los entiendo por nada >:( como son La Segmentación que se requiere creo yo en el bootloader y en un kernel ( digo kernel porque queria un bootloader y un archivo ejecutable ). Digo esto debido a que por ejemplo quiero mostrar un mensaje y no lo muestra o lo hace incompleto.

He programado con FASM MASM y NASM pero más me gusta el nasm ya que es multisistema (así se llama creo).

Ya estaba trabajando en un minisistema operativo (resaltando "mini") que muestre un mensaje y pida una o mas teclas y todo funciona a la "perfección" a excepción que no puedo trabajar con 32 bits.

Cuando intento entrar al famoso modo protegido lógicamente no me deja usar interrupciones ya que está "protegido". Al tener este problema investigué y encontré algunos temas (en inglés por cierto) que tengo que escribir directamente en la memoria pero tampoco no me funciona...

Bueno esas son todas mis dudas por el momento. :)

Lo que quiero hacer en conclusión es un bootloader de 16 bits que lea un kernel.bin y este kernel pase de 16 bits a 32 bits y muestre un mensaje. NADA MÁS :xD

¿Alguien me podría explicar por favor? y disculpen la molestia ;D


Título: Re: Bootloader 32-bit y segmentación
Publicado por: zu-zu en 4 Septiembre 2012, 23:11 pm
Sería mucho mejor que publicaras el código conflictivo, información de la VM que estas usando para hacer pruebas, arquitectura, etc.


Título: Re: Bootloader 32-bit y segmentación
Publicado por: Khronos14 en 4 Septiembre 2012, 23:38 pm
¿Tienes algo hecho? Básicamente, primero tienes que comprender el sistema de archivos FAT12. A mi me llevó un poco y construí mi propia herramienta para crear imágenes FAT12:

http://sourceforge.net/projects/fat12maker/

Luego, usando NASM hice el bootstrap para el sector 0 de mi imagen del disquete. Este se encarga de leer todas las entradas del directorio raiz y busca el archivo Stage_2.bin. Una vez que encuentra la entrada, lee el StartingCluster.

Almacenamos ese valor y cargamos en memoria toda la FAT, y empezamos a cargar sectores en memoria según el StartingCluster y los siguientes...

Lo único que te queda luego es hacer un jump al buffer y listo!

Ahora estas en el Stage_2, entrar en modo protegido es bastante sencillo: tienes que crear la GDT, poner a 1 el bit menos significativo de CR0 y hacer un jump:

Código
  1. jmp 08h:protected_mode
  2.  

En http://wiki.osdev.org/Main_Page tienes mucha información, pero claro, hay que buscar en inglés.

Saludos.