BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Bootloader x86 sobre Qemu en ensamblador que cambie a modo protegido

PezDeRedes

Me veo en tener que hacer un bootloader x86, que ejecuto sobre Qemu. Con bastante esfuerzo he conseguido cargar una segunda etapa (para escapar de la limitación de estar en el primer sector del "disco"), pero debería cambiar a modo protegido, implementar mi rutina para manejar el teclado y escribir en pantalla (en modo protegido de 32 bits las interrupciones de la BIOS ya no son accesibles), etc. Y, literalmente, no sé por dónde empezar. Encuentro poca documentación, dispersa y que no entiendo bien. Incluso le he preguntado a ChatGPT pero, como era esperable, hace aguas por todos lados.

bootloader x86, que ejecuto sobre Qemu

Dejar claro que ensamblador se me da fatal desde que empecé la carrera, de milagro consigo hacer nada y no entiendo casi nada de lo que leo. No me entra en la cabeza ese tipo de lógica y me pierdo muy rápido.

Llevo dos semanas detrás de esto y no avanzo, así que agradezco sugerencias, consejos, referencias, lo que sea.

PezDeRedes

Sí, en esa Wiki he estado bastante. Estas partes me las he mirado:

wiki.osdev.org/Rolling_Your_Own_Bootloader

wiki.osdev.org/Bootloader

Por aquí también: viralpatel.net/taj/tutorial/hello_world_…otloader.php, pero claro, no llega a hacer casi nada.

Este PDF, pero a mi o me enseñas código o me quedo peor que estaba (hablo siempre en ensamblador, ya con que me des un lenguaje tan básico como C me desenvuelvo mucho mejor): cs.cmu.edu/~410-s07/p4/p4-boot.pdf

Con estas diapositivas he conseguido sacar algún código, pero no me funciona o me hace cosas raras: studylib.es/doc/6548166/modo-protegido (como estoy no hay quien lo depure, vaya usted a saber).

Qué desesperación…

🗨️ 2
PezDeRedes

Pues creo que lo voy a probar, gracias.

rbetancor
1

Uff … tiempo ah que no toco ensamblador de x86, lo último creo recordar que fue algo relacionado con cálculo de tablas trigonométricas para una demo y era para 32bits y modos X de video … jejeje, ¡qué tiempos! …

Bueno para entender como trabajar en ensamblador, deberías de tener muy claro como funcionan los distintos componentes de una CPU y como rulan las "máquinas de estados finitos", ya luego es saber la secuencia de arranque y que hardware interviene y como te comunicas con él.

Este artículo, te vendrá genial.

🗨️ 1
PezDeRedes

Muchas gracias, de verdad. Leeré el artículo detenidamente a ver si saco cosas en claro.

PezDeRedes

¡Muchas gracias!

shalty

Me sorprende leer sobre "cambiar de modo real a protegido" en 2023, pero bueno, hay que aprender en algun momento :)

Hace muchisimos años que no toco nada de esto, pero algo recuerdo. A ver si te puede servir de algo…

El cambio de modo real (en el que te arranca la cpu por defecto) a modo protegido, era mas que nada desactivar interrupciones -por razones logicas mientras haces el traspaso- con un cli, despues configurar la IDT/GDT (hablo de memoria, son los descriptores para la MMU, donde defines los segmentos que vas a usar cuando "saltes"), cargarlos en su sitio (via CR0 o creo que con instruccion especifica), y luego hablarle al chip del teclado (si hijo si), el 8200noseque, para levantar la linea A20 y entrar en modo protegido. Todo muy coherente ;)

Lo que se solia hacer si no querias complicarte la vida demasiado, era usar una especie de "pseudo"modo protegido donde usases los primeros 4gb de ram como "flat mode". Y luego pues atacar el hardware (para modo texto es super sencillo, escribes caracteres en la posicion B8000h (direccion absoluta), o si estas en modo grafico pixeles en la A0000h, pero aqui ya has de mapear el framebuffer donde puedas pillarlo entero y es mas jaleo (no todas las vbios te dan facilidades para esto).

Lo chungo es que encontrarias mas info en txt's de la epoca de las BBS que ahora en internet :)

A ver si busco algun documentito o cacho de codigo…

🗨️ 2
shalty

De los que he estado mirando asi por encima…

Aqui tienes no solo las 4 lineas de codigo para saltar a modo protegido, sino como definir una GDT para codigo y datos (algo basico sin florituras).

osdever.net/tutorials/view/the-world-of-…otected-mode

Y luego una vez estes en modo protegido, aparte de las direcciones de pantalla para escribir cosas, si necesitas leer el teclado, pasa de bios o operativo y ataca al hardware directamente sin complicaciones:

asmcommunity.net/forums/topic/?id=25317#post-185197

PD: de todas formas siempre haz lo que te diga el profesor y siguiendo sus reglas, no lo que digan señores anonimos del intenne :)

🗨️ 1
PezDeRedes

Muchísimas gracias compañero, parecen bastantes útiles los recursos que me pasas.

de todas formas siempre haz lo que te diga el profesor y siguiendo sus reglas, no lo que digan señores anonimos del intenne :)

Tranqui, si precisamente lo que quiere el profesor es que investiguemos y aprendamos.

vukits

jamás he tocado ensamblador x86 , sólo MIPS y ARM. asi que no te tomes muy en serio lo que te voy a decir

Para ser buen escritor, hay que haber leído muchos libros antes…

Antes de nada, echale un vistazo a los cargadores de Software libre que hay, .

a botepronto grub y cia

en.m.wikibooks.org/wiki/X86_Assembly/Bootloaders

PD: ojo, no es lo mismo cargar en BIOS que EFI,, y creo que es más sensato hacerlo para Efi

PD': y si en vez de para BIOS lo haces para LibreBoot , ahi sí que tendrás tema de conversación en las fiestas de la uni de Farmacia :P

🗨️ 3
PezDeRedes
1

PD: ojo, no es lo mismo cargar en BIOS que EFI,, y creo que es más sensato hacerlo para Efi

PD': y si en vez de para BIOS lo haces para LibreBoot , ahi sí que tendrás tema de conversación en las fiestas de la uni de Farmacia :P

Cuidadito, que yo hago lo que me mandan, tampoco nos vengamos arriba :P

Gracias por lo de la wiki.

lhacc
1

Ya ves, eso mismo estaba yo pensando. ¿Qué sentido tiene hacerlo para BIOS, si UEFI lleva más de diez años siendo el sistema actual, y de hecho todas las placas actuales vienen con el CSM desactivado por defecto y no pueden ejecutar código BIOS? La puntera unibersidad hezpañola como siempre haciendo de las suyas.

🗨️ 1
shalty
1

No estoy de acuerdo. La mision de la universidad es sentar unas bases teoricas… "enseñar a aprender", si se quiere entender asi, pero nunca la de formarte en las ultimas tecnologias (que en informatica siempre es la moda de turno).

Es cierto que con el tiempo acaban calando y moldeando las practicas de laboratorio, pero es una cuestion secundaria. La universidad no es (con todo el respeto, ojo!) un modulo de FP, ambas tienen sentidos diferentes y su razon de ser (y ambas son igualmente respetables).