ARTICULO RECOMENDADO PARA USUARIOS NIVEL EXPERTO.
Master Boot Record (MBR)
El registro principal de arranque o registro de arranque maestro como también se conoce (del inglés Master boot record cuyo acrónimo es MBR), es un sector de 512 bytes al principio del disco duro que contiene una secuencia de comandos necesarios para cargar un sistema operativo. Es decir, es el primer registro del disco duro, el cual contiene un programa ejecutable y una tabla donde están definidas las particiones del disco duro.
Es el primer sector físico (Cilindro 0, Cabeza 0, Sector 1) asignado a un disco duro en un sistema (el primer disco duro con el número de periférico-BIOS 0x80). Cada disco duro tiene un MBR, pero no todas las BIOS pueden arrancar el sistema operativo desde cualquiera de los discos duros. Cuando se arranca desde el disco duro, la BIOS copia el contenido del MBR en una dirección fija de la memoria para luego darle el control. Este código arrancará seguidamente el sistema operativo, ya sea desde el disco duro o desde un Boot-Loader o cargador, algo más complejo, como por ejemplo LILO, GRUB o GAG.
Cuando se arranca el ordenador la BIOS ejecuta el MBR del dispositivo que tenga configurado en la CMOS. Si en el primer dispositivo no existe, suele haber otros disposivos alternativos, configurados también en la CMOS, para que arranque por lo menos alguno.
El MBR incluye generalmente la tabla de particiones y un código inicial para arrancar el Sistema operativo.
Estructura del Master Boot Record
Offset Naturaleza size
+00h Código ejecutable 446 byte
+1BEh 1ª entrada de tabla de particiones 16 bytes
+1CEh 2ª entrada de tabla de particiones 16 bytes
+1DEh 3ª entrada de tabla de particiones 16 bytes
+1EEh 4ª entrada de tabla de particiones 16 bytes
+1FEh Marcador ejecutable (AA55h) 2 bytes
Este diseño permite que la BIOS arranque el código máquina contenido allí y este inicie el sistema operativo según las especificaciones de su programa. Muchos virus aprovechan este funcionamiento de arranque standard para arrancarse antes que el sistema operativo y obtener el control, en los procesadores Intel, el código máquina se ejecuta en modo real.
Registro de inicio de volumen (VBR)
Un registro de inicio de volumen ( VBR ) (también conocido como sector de inicio de volumen , registro de inicio de partición o sector de inicio de partición ) es un tipo de sector de inicio introducido por IBM Personal Computer . Se puede encontrar en un dispositivo de almacenamiento de datos particionados , como un disco duro o un dispositivo sin particiones , como un disquete , y contiene un código de máquina para programas de arranque (generalmente, pero no necesariamente, sistemas operativos ) almacenados en otras partes de el dispositivo. En no particionado dispositivos de almacenamiento, es el primer sector del dispositivo. En dispositivos particionados, es el primer sector de una partición individual en el dispositivo, con el primer sector de todo el dispositivo como un Registro de inicio maestro (MBR) que contiene la tabla de partición .
El código en los registros de inicio de volumen es invocado directamente por el firmware de la máquina o indirectamente por código en el registro de inicio maestro o un administrador de arranque . El código en el MBR y VBR se carga en esencia de la misma manera .
Invocar un VBR a través de un gestor de arranque se conoce como carga de cadena . Algunos sistemas de arranque dual , como NTLDR (el gestor de arranque para todas las versiones de sistemas operativos derivados de Windows NT de Microsoft hasta e incluyendo Windows 10 y Windows Server 2012 ), toman copias del código de arranque que los sistemas operativos individuales instalan en un solo VBR de la partición y almacenarlos en archivos de disco, cargando el contenido VBR relevante del archivo después de que el gestor de arranque haya preguntado al usuario qué sistema operativo arrancar. En Windows Vista , Windows Server 2008 y versiones más nuevas, NTLDR fue reemplazado; la funcionalidad del gestor de arranque la proporcionan, en cambio, dos nuevos componentes: WINLOAD.EXE y el Administrador de arranque de Windows .
En sistemas de archivos como FAT12 (excepto en DOS 1.x), FAT16 , FAT32 , HPFS y NTFS , el VBR también contiene un bloque de parámetros BIOS (BPB) que especifica la ubicación y el diseño de las principales estructuras de datos en disco para el sistema de archivos. (Una discusión detallada del diseño del sector de FAT VBR, las diversas versiones de FAT BPB y sus entradas se pueden encontrar en el artículo de FAT ).
Firma
La presencia de un cargador de arranque IBM PC compatible para CPU x86 en el sector de arranque es, por convención, indicada por una secuencia hexadecimal de dos bytes llamada firma de sector de arranque ( 55h en offset fijo + 1FEh y AAh en + 1FFh ) para tamaños de sector de 512 bytes o más. [nb 1] Para sectores de 512 bytes, esto también marca el final del sector. Los VBR en sectores más pequeños y más grandes también pueden mostrar firmas al final del tamaño del sector real, sin embargo, la semántica descrita en este documento se aplica a la firma de 16 bits solo a + 1FEh .
Esta firma indica la presencia de al menos un gestor de arranque ficticio que es seguro de ejecutar, incluso si no puede cargar realmente un sistema operativo. No indica la presencia de un sistema de archivos (o incluso de un sistema de archivos ) o sistema operativo, aunque algunas versiones anteriores de DOS anteriores al 3.3 se basaron en su proceso para detectar los medios con formato FAT (las versiones más nuevas no lo hacen). El código de arranque para otras plataformas o CPU no debe usar esta firma, ya que esto puede provocar un bloqueo cuando el BIOS pasa la ejecución al sector de arranque suponiendo que contiene un código ejecutable válido. Esto implica que FAT12 / FAT16 los medios que se utilizarán también en versiones muy antiguas de DOS deben mantener la firma, incluso si no contienen un sistema operativo o si solo se pueden iniciar en otras plataformas; en consecuencia, deben contener al menos un cargador compatible con x86 (falso) también (para comparación, vea ejemplos de FAT en Atari ST y con MSX-DOS ). Sin embargo, algunos medios para otras plataformas contienen erróneamente la firma incluso sin un cargador simulado compatible con x86, lo que hace que el cheque no sea 100% confiable en la práctica.
La mayoría de las BIOS del sistema prueban la firma desde (al menos) la PC / AT de IBM (pero no por la PC original de IBM y algunas otras máquinas). Aún más, también es verificado por la mayoría de los cargadores de arranque MBR antes de pasar el control al sector de arranque. Algunos BIOS (como IBM PC / AT) realizan la comprobación solo para discos fijos / unidades extraíbles, mientras que para los discos blandos y los superfloppies es suficiente comenzar con un byte mayor o igual a 06h y las primeras nueve palabras que no contienen el mismo valor, antes de que el sector de arranque se acepte como válido, evitando así la prueba explícita para 55h , AAh en disquetes. Desde viejos sectores de arranque (es decir, muy antiguo CP / M-86y medios DOS) a veces no cuentan con esta firma a pesar del hecho de que pueden ser iniciados con éxito, la verificación puede ser deshabilitada en algunos entornos. Esto también refleja el hecho de que los disquetes se pueden formatear para usar sectores de menor tamaño que 512 bytes.
Si el código BIOS o MBR no detecta un sector de arranque válido y, por lo tanto, no puede pasar la ejecución al código del sector de arranque, intentará con el siguiente dispositivo de arranque en la fila. Si todos fallan, normalmente mostrará un mensaje de error e invocará INT 18h . Esto iniciará el software residente opcional en ROM ( ROM BASIC ), intentará arrancar remotamente a través de la red, reiniciará el sistema a través de INT 19h después de la confirmación del usuario o hará que el sistema detenga el proceso de arranque hasta el siguiente encendido.
Del desplazamiento decimal 72 a 79, un PBR NTFS contiene el número de serie del identificador de volumen de UUID de partición.
Invocación
El código de arranque en el VBR puede suponer que el BIOS ha configurado sus estructuras de datos e interrupciones e inicializado el hardware. El código no debe suponer más de 32 KB de memoria para estar presente en el funcionamiento a prueba de fallas; si necesita más memoria, debe consultar INT 12h para ello, ya que otros códigos previos al inicio (como superposiciones de extensión de BIOS, sistemas de encriptación o cargadores de arranque remotos ) también pueden estar presentes en otros lugares de la memoria (y normalmente se ocultarían de ellos). el sector de arranque al reducir la memoria INT 12h informada en consecuencia, de modo que no se sobreescriban por las acciones de MBR y VBR). La especificación de inicio del BIOS permite 64 KB de memoria y recomienda explícitamente 0000h : 7C00h a 0000h :FFFFh como un bloc de notas temporal. [1] El código de arranque no debe asumir CPUs mejores que las originales de Intel 8088 o 8086 (utilizadas en la PC original) y no debe hacer suposiciones con respecto al estado exacto del hardware, el sistema de interrupción (las interrupciones pueden habilitarse o deshabilitarse) o la ubicación y el tamaño de la pila. Aunque el BIOS original de IBM inicializa los registros de la CPU DS, ES y SS para segmentar 0000h y mantiene la pila inicial en SS : SP = 0000h : 0400h, esta no es una condición para confiar, ya que no todos los códigos BIOS y MBR siguen esta convención. Los registros no mencionados a continuación deben tratarse como no inicializados. El acceso directo al hardware normalmente no está permitido. Mientras que la tabla de parámetros de disco (DPT / FDPB) se configura típicamente en 0000h : 0078h en memoria, la VBR debe mover (y posiblemente reparar) la DPT apuntada por el vector INT 1Eh a esta ubicación (INT 1Eh no es una interrupción , pero un puntero lejano a la DPT).
Algunas condiciones se pueden relajar en entornos controlados, por ejemplo, algunos cargadores de arranque suponen tener hasta 128 KB de memoria para trabajar en funcionamiento normal (sin consultar más), y algunos cargadores de arranque que utilizan acceso LBA asumen al menos un Intel CPU 80188 o 80186 .
El VBR se carga en la ubicación de memoria 0000h : 7C00h y con los siguientes registros de CPU configurados cuando el cargador de arranque anterior (es decir, típicamente el BIOS o MBR, pero posiblemente otro gestor de arranque) le pasa la ejecución saltando a 0000h : 7C00h en el modo real de la CPU .
-
CS : IP = 0000h : 7C00h (fijo)
Algunos BIOS de Compaq usan erróneamente 07C0h: 0000h en su lugar. Si bien esto se resuelve en la misma ubicación en la memoria de modo real, no es estándar y debe evitarse, ya que el código VBR que asume ciertos valores de registro o que no está escrito para ser reubicable puede no funcionar de otra manera.
-
DL = unidad de disco de arranque ( disquetes / superfloppies : 00h = primero, 01h = segundo, ..., 7Eh ; discos fijos / unidades extraíbles : 80h = primero, 81h = segundo, ..., FEh ; los valores 7Fh y FFh están reservados) para ROM / unidades remotas y no debe usarse en el disco). [2]DL es compatible con BIOS de IBM, así como con la mayoría de las demás BIOS. Se sabe que el BIOS Toshiba T1000 no es compatible con esto correctamente, y algunos BIOS viejos Wyse 286 usan valores DL mayores o iguales a 2 para discos duros. Los dispositivos USB configurados como superfloppies normalmente reciben una asignación de DL = 00h o 01h , sin embargo, algunos BIOS raros presentan erróneamente memorias USB configuradas como unidades extraíbles como DL = 01h , en lugar de usar DL = 80h . Tradicionalmente, solo los valores 00h y 80h eran transmitidos por el BIOS durante el arranque, y muchos sectores de arranque estaban cableados para trabajar con valores fijos, de todos modos. La especificación del BIOS Plug and Play y la especificación del arranque del BIOS(BBS) permite que otros dispositivos sean también de arranque. Lo último también recomienda que los códigos MBR y VBR usen DL en lugar de los valores predeterminados internos. [1] (NB. MS-DOS / PC DOS y OS / 2 VBR ignoran el valor de DL proporcionado y recuperan el valor almacenado en el desplazamiento + 19h en el bloque de parámetros de BIOS ampliado (EBPB) o en el desplazamiento de sector + 1FDh en las versiones de DOS 3.2 a 3.31. Algunas versiones de DR-DOS usan DL comenzando con 7.02. DR-DOS 7.07 VBRs por defecto para usar DL e ignoran el valor de BPB, pero SYS / O [: nnn]se puede utilizar para reiniciar el comportamiento anterior de usar el valor BPB o incluso aplicar una unidad de disco de arranque nnn particular para almacenar allí. [2] En volúmenes FAT32 , FreeDOS también aprovecha el valor DL, mientras que lo hace en volúmenes FAT12 / FAT16 solamente, si el valor BPB está establecido en FFh .
-
DH bit 5 = 0: dispositivo admitido a través de INT 13h ; else: no importa (debe ser cero). DH es compatible con algunas BIOS de IBM. Algunos códigos MBR y VBR conservan el valor de DH.
Los sistemas con BIOS Plug-and-Play o soporte BBS proporcionarán un puntero a los datos PnP además de DL: [1] [3]
-
DL = unidad de accionamiento de arranque (ver arriba)
-
ES : DI = puntos a " $PnP" estructura de verificación de instalación
Esta información permite que el gestor de arranque (en el MBR o VBR) interactúe activamente con el BIOS o una superposición residente de PnP / BBS para configurar el orden de arranque, etc., sin embargo, esta información es ignorada por la mayoría de los MBR y VBR estándar. . Idealmente, ES: DI se transfiere, pero los sistemas operativos habilitados para PnP también suelen tener métodos alternativos para recuperar el punto de entrada PnP BIOS más tarde, de modo que la mayoría de los sistemas operativos no dependen de esto. Información en ES: DI se puede utilizar como una pista: según la especificación PnP BIOS, la estructura de verificación de instalación "$ PnP" se puede encontrar buscando una firma de la cadena ASCII $ PnP en la memoria del sistema comenzando desde F0000h a FFFFFh en cada Límite de 16 bytes.
Con medios particionados, cuando el MBR (o el gestor de arranque diferente) lanza el VBR en lugar del BIOS, muchas implementaciones pasan información adicional al VBR además de solo DL (y algunas veces DH y ES: DI también):
-
DS : SI = apunta a la entrada de la tabla de particiones MBR de 16 bytes (en el MBR reubicado) correspondiente con el VBR activado. PC-MOS 5.1 depende de esto para arrancar si ninguna partición en la tabla de particiones está marcada como de arranque. En conjunción con LOADER, los sectores de inicio MultiUSI y REAL / 32 usan esto para ubicar el sector de arranque de la partición activa (u otro cargador de arranque como IBMBIO.LDR en una posición fija en el disco) si el archivo de arranque (LOADER.SYS) podría no se encuentra. PTS-DOS 6.5 y S / DOS 1.0 usan esto junto con su Partición activa avanzada (AAP) característica. Además del soporte para LOADER y AAP, DR-DOS 7.07 puede usar esto para determinar el método de acceso INT 13h necesario al usar su código dual CHS / LBA VBR. El código MBR de OS / 2, MS-DOS (anterior a 7.0), PC DOS (hasta 7.10) y Windows NT (hasta aproximadamente 2007) proporcionan esta misma interfaz también, aunque estos sistemas no hacen uso de eso El MBR instalado por Windows NT 6.0 (y superior) utiliza otros registros y, por lo tanto, ya no es compatible con estas extensiones. Mientras que algunas extensiones solo dependen de la entrada de la tabla de particiones de 16 bytes, otras extensiones pueden requerir que la tabla de partición 4 (o 5 entradas) esté presente también.
Bajo DR-DOS 7.07 una interfaz extendida puede ser utilizada opcionalmente por el MBR y junto con LOADER:
-
AX = firma mágica que indica la presencia de esta extensión ( 0EDCh )
-
DL = unidad de accionamiento de arranque (ver arriba)
-
DS: SI = apunta a la entrada de la tabla de particiones MBR de 16 bytes utilizada (ver arriba)
-
ES: BX = inicio del sector de arranque o NEWLDRimagen de sector especial " (típicamente 7C00h)
-
CX = reservado
Junto con las tablas de particiones GUID (GPT), una propuesta de Hybrid MBR de especificación de unidad de disco mejorada (EDD) 4 recomienda otra extensión a la interfaz de MBR a VBR:
-
EAX = 54504721h (" !GPT")
-
DL = unidad de accionamiento de arranque (ver arriba)
-
ES: DI = puntos a " $PnP" estructura de verificación de instalación (ver arriba)
-
DS: SI = apunta a una estructura de transferencia de MBR híbrida, que consiste en una entrada de tabla de partición de MBR ficticia de 16 bytes (con todos los bits configurados excepto el indicador de arranque en offset + 0h y el tipo de partición en offset + 4h ) seguido de datos adicionales . Esto es parcialmente compatible con la anterior extensión DS: SI discutida anteriormente, si solo estas particiones requieren la entrada de partición de 16 bytes, no la tabla de partición completa.