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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Bootloader 32-bit y segmentación
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bootloader 32-bit y segmentación  (Leído 3,574 veces)
lweb20

Desconectado Desconectado

Mensajes: 43



Ver Perfil WWW
Bootloader 32-bit y segmentación
« 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


En línea

zu-zu

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Bootloader 32-bit y segmentación
« Respuesta #1 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.


En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Bootloader 32-bit y segmentación
« Respuesta #2 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
BootLoader en C++?¿
Programación C/C++
Riki_89D 6 5,212 Último mensaje 11 Agosto 2010, 18:33 pm
por Riki_89D
Crear Un Bootloader en C
Programación C/C++
dnsdirm 0 4,234 Último mensaje 28 Junio 2011, 17:35 pm
por dnsdirm
Ensamblador bootloader ¿?
ASM
lucaslopez0000 4 4,494 Último mensaje 22 Junio 2013, 23:01 pm
por Eternal Idol
bootloader
Dispositivos Móviles (PDA's, Smartphones, Tablets)
yamijhon 3 2,986 Último mensaje 5 Mayo 2016, 21:19 pm
por Baquinjam Palas
¿Por que segmentacion?
Programación General
Usuario887 8 4,387 Último mensaje 17 Mayo 2020, 16:55 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines