Programación General > ASM (Ensamblador)

 Mbr Disco Duro

(1/2) > >>

malcom:
Hola! podria de alguna manera reemplazar o modificar el mbr de mi disco duro 'C' con un programa hecho en nasm?. Tengo windows xp SP1.

Podria hacer esto si aprendo assembler de 32 bits?  :comp:

Gracias de Antemano.

jaumegs:
Teóricamente por lo que se, para programar el sector de arranque de un disco es necesario usar el procesador en modo 16bits. Despues de eso ya se puede arrancar el modo protegido del ensamblador(32 bits).

Si se hace del mismo modo que con un disquete, es sencillo, solo has de cargar en el sector 0 del disco duro el programa que quieras que te carge, con algunas peculiaridades...

P.D.- Da igual el sistema operativo que estés utilizando... Al iniciarse el ordenador leerá el MBR lo primero, y cargará el programa que haya en el, "substituyendo" al sistema operativo que tuvieras instalado.

SALUDOS

Eternal Idol:

--- Cita de: "malcom" --- Hola! podria de alguna manera reemplazar o modificar el mbr de mi disco duro 'C' con un programa hecho en nasm?. Tengo windows xp SP1.

Podria hacer esto si aprendo assembler de 32 bits?  :comp:

Gracias de Antemano.
--- Fin de la cita ---
Si, como poder hacerlo podes. ¿Existe alguna razon para hacerlo?

Podes hacerlo desde Windows usando su API, tene en cuenta que si lo haces mal jodes el BOOT.

 :devil:

Alpha_:
Me uno al pedido... ya sabía que se puede hacer, pero quisiera que me tiraran algo de info.. como por ejemplo, qué cosas debería tener en cuenta, qué cosas puedo y no puedo usar (interrupciones de BIOS? de DOS?, el tamaño que puede ocupar como máximo el código, etc).

Nunca lo hice y me resulta un proyecto interesante para aprender.

Y dicho sea de paso.. cómo podría ir testeando el código sin tener que grabarlo en el MBR antes?

jaumegs:
Bueno, generalmente depende del sistema de archivos que uses... si es FAT12 o 16 o 32 PERFECTO, si es NTFS.... pues realmente no se como se hace...

Bueno, si es FAT el sector de arranque (BOOTSECTOR) contiene cierta información:

--- Código: Text --- Des.  Longitud  Descripción0x00  3 bytes  Instrucción de salto al programa de arranque0x03  8 bytes  Identificación del sistema (fabricante)0x0B  1 palabra  Número de bytes por sector0x0D  1 byte  Número de sectores por cluster0x0E  1 palabra  Número de sectores reservados (con BootSector)0x10  1 byte  Número de copias de la FAT0x11  1 palabra  Número máximo de entradas del directorio raíz0x13  1 palabra  Número total de sectores0x15  1 byte  Identificador del disco (F0 para 3 ½ y 1.44MB)0x16  1 palabra  Número de sectores para cada FAT0x18  1 palabra  Número de sectores por pista0x1A  1 palabra  Número de cabezas/caras0x1C  1 palabra  Número de sectores ocultos0x20  4 byte  Número total de sectores (si 0x13 es 0)0x24  1 byte  Número de unidad física (sólo discos duros)0x25  1 byte  Reservado0x26  1 byte  Byte de marca con el valor 0x290x27  4 bytes  Número de serie del disco0x2B  11 bytes  Nombre del disco (NO NAME si no tiene)0x36  5 bytes  Tipo de FAT: FAT12 o FAT16...  ...  ............  ...  Rutina de Arranque (Bootstrap-Loader) 
Bueno, esto es necesario si quereis conservar el formato existente... (recomiendo leer documentación sobre la FAT)

Esto ha de estar presente siempre en el BootSector, sino os habreis cargado la FAT... bueno, después de esto va el programa que querais....

Que podeis usar en el?... pues todo, pero solo código de 16bits. Claro está que no se pueden usar interrupciones del DOS, mas que nada porque siempre se arranca el programa del BootSector antes que el SO, asi que si modificais el BootSector de vuestro disco duro... y es el único que teneis, si no haceis una copia del que habia antes de modificarlo, ya no podreis cargar ni WINDOWS ni nada...

Que tamaño puede tener?... generalmente 512bytes, pero si modificas el offset 0Eh(nº sectores reservados) podreis hacer que ocupe el número de sectores que querais... asi que se puede hacer un programa de 2Mb, 3Mb, 500Mb... ya dependerá de la capacidad de vuestro disco duro, y claro está... de la RAM...

PD IMPORTANTE- Si modificas el BootSector de tu disco duro principal(es el que arranca el SO que usas) y no sabes como recuperarlo luego... tendras que formatear el disco i reinstalar el SO. Así que recomiendo hacer una copia de este sector antes de tocar nada (Con el winhex por ejemplo) o practicar con disketes, que el método es el mismo.

Bueno, si os interesa mas información podria hacer un MINImanual (y digo mini porque mis conocimientos de ASm... :P , pero podria introducir datos acerca el sistema de archivos FAT que este si que me lo conozco)

SALUDOS

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa