Início

Introdução

Executar um programa no boot significa rodá-lo em um ambiente minimalista (bare-metal ou com bootloader), independente do SO. Isso é útil para diagnósticos, recuperação ou tarefas personalizadas. Requisitos:

  • Conhecimento básico de programação (C/Assembly).

  • Ferramentas como NASM, GCC, GRUB ou Windows ADK.

  • Teste em ambiente virtual (ex.: QEMU).

  • Acesso administrativo (sudo no Linux, administrador no Windows).

Aviso: Desative Secure Boot no UEFI se necessário (entre no setup do BIOS/UEFI pressionando Del, F2 ou F10 durante o boot, e desative na seção de boot). Teste com cuidado para evitar problemas. Faça backup do sistema antes de prosseguir.

Executando no Linux (Usando GRUB ou Outras Abordagens)

O GRUB é o bootloader padrão no Linux e permite configurações flexíveis. Outras opções incluem partições personalizadas, firmware ou sistemas minimalistas. Abaixo, os passos são detalhados com comandos específicos e verificações.

1. Usar o Bootloader GRUB

  1. Prepare o ambiente: Abra um terminal e obtenha permissões de root com sudo -i. Instale ferramentas necessárias: apt install grub-customizer nasm (Ubuntu/Debian) ou equivalente (ex.: dnf install grub2-tools nasm no Fedora).

  2. Crie o programa: Escreva um programa bare-metal em Assembly (ex.: boot.asm). Exemplo:

    bits 16
    org 0x7C00
    mov ah, 0x0E
    mov al, 'H'
    int 0x10
    mov al, 'i'
    int 0x10
    cli
    hlt
    times 510-($-$$) db 0
    dw 0xAA55

    Compile com nasm -f bin boot.asm -o /boot/programa.bin.

  3. Edite o GRUB: Abra nano /etc/grub.d/40_custom. Adicione:

    menuentry "Meu Programa Personalizado" {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt1'  # Ajuste para sua partição de boot
        chainloader /programa.bin
    }

    Salve (Ctrl+O, Enter, Ctrl+X).

  4. Atualize o GRUB: Execute update-grub. Verifique o output para erros. O arquivo grub.cfg será atualizado em /boot/grub/.

  5. Teste: Reinicie com reboot. Pressione Shift no boot para abrir o menu GRUB. Selecione "Meu Programa Personalizado". Se falhar, use um live USB com boot-repair.

  6. Reversão: Remova a entrada de /etc/grub.d/40_custom e execute update-grub.

Limitações: O programa deve ser minimalista, sem dependências de bibliotecas.

2. Criar uma Partição de Boot Personalizada

  1. Verifique o disco: Use fdisk -l para listar partições. Identifique o disco (ex.: /dev/sda).

  2. Crie partição: Execute fdisk /dev/sda, pressione 'n' (nova), 'p' (primária), escolha tamanho (ex.: +100M), defina tipo como EFI (ef) se UEFI, grave com 'w'.

  3. Formate: mkfs.fat -F32 /dev/sdaX (para EFI) ou mkfs.ext2 /dev/sdaX. Monte: mkdir /mnt/boot; mount /dev/sdaX /mnt/boot.

  4. Compile o programa: Compile boot.asm para /mnt/boot/programa.bin com nasm -f bin boot.asm -o /mnt/boot/programa.bin.

  5. Instale GRUB: grub-install --target=i386-pc --boot-directory=/mnt/boot /dev/sdaX. Crie /mnt/boot/grub/grub.cfg com a entrada do programa.

  6. Configure UEFI: Reinicie, entre no setup UEFI, priorize a nova partição.

  7. Teste: Use qemu-system-x86_64 -drive file=/dev/sdaX,format=raw para simular.

3. Modificar o Firmware (BIOS/UEFI)

  1. Instale EDK II: git clone https://github.com/tianocore/edk2.git. Configure: make -C BaseTools.

  2. Crie app EFI: Escreva código C/Assembly (ex.: exibir mensagem via UEFI protocols). Coloque em edk2/SeuModulo/.

  3. Compile: build -p Plataforma/Plataforma.dsc -m SeuModulo/SeuModulo.inf.

  4. Integre: Baixe o firmware do fabricante (ex.: ASUS). Use UEFITool para inserir o .efi.

  5. Atualize: Copie para USB FAT32, flash via UEFI setup.

  6. Teste: qemu-system-x86_64 -bios seu_firmware.rom.

Riscos: Pode "brickar" o hardware. Mantenha backup do firmware.

4. Usar um Sistema Operacional Minimalista

  1. Instale Buildroot: wget https://buildroot.org/downloads/buildroot-latest.tar.gz, extraia, configure com make menuconfig.

  2. Adicione programa: Inclua seu binário como pacote, configure init em rootfs_overlay/etc/init.d/S01seuprograma.

  3. Compile: make gera rootfs.tar ou ISO.

  4. Grave: dd if=output/images/rootfs.iso of=/dev/sdX bs=4M.

  5. Teste: Configure UEFI para boot do dispositivo.

Exemplo Prático: Hello World no Boot

Compile com nasm -f bin boot.asm -o boot.bin e integre ao GRUB.

Executando no Windows (Usando BOOTMGR ou Outras Abordagens)

O Windows usa o Boot Manager (BOOTMGR), menos flexível que o GRUB. Use entradas personalizadas, WinPE, bootloader alternativo ou USB. Abaixo, passos detalhados.

1. Usar o Windows Boot Manager

  1. Prepare o ambiente: Abra o Prompt de Comando como administrador (Win+R, digite "cmd", Ctrl+Shift+Enter). Instale NASM (baixe de nasm.us, adicione ao PATH).

  2. Crie o programa: Escreva boot.asm (exemplo abaixo). Compile: nasm -f bin boot.asm -o C:\boot.bin.

  3. Gere uma GUID: Execute bcdedit /create /d "Meu Programa" /application BOOTSECTOR. Anote a GUID exibida (ex.: {12345678-...}).

  4. Configure o BCD: Execute:

    Verifique com bcdedit /enum all.

  5. Grave o binário: Copie boot.bin para C:\ (ex.: copy boot.bin C:\).

  6. Teste: Reinicie (pressione F8 ou Shift+Restart para menu de boot). Selecione "Meu Programa". Use USB de recuperação se falhar.

  7. Reversão: bcdedit /delete {sua-guid}.

2. Criar um Ambiente WinPE

  1. Baixe o ADK: No site da Microsoft, baixe o Windows ADK para sua versão (ex.: Windows 11).

  2. Instale: Escolha "Deployment Tools" e "Windows Preinstallation Environment".

  3. Crie base WinPE: copype amd64 C:\WinPE (ou x86 para 32-bit).

  4. Adicione programa: Copie seu executável (ex.: programa.exe) para C:\WinPE\media. Edite C:\WinPE\media\sources\startnet.cmd com notepad, adicione:

  5. Crie mídia: MakeWinPEMedia /UFD C:\WinPE F: (USB em F:) ou MakeWinPEMedia /ISO C:\WinPE C:\WinPE.iso.

  6. Configure UEFI: Insira USB, reinicie, priorize USB no setup UEFI.

  7. Teste: Verifique se o WinPE executa o programa.

3. Modificar o Firmware (UEFI)

  1. Instale EDK II: Baixe do GitHub, configure com Visual Studio ou GCC.

  2. Crie app EFI: Escreva código C usando UEFI protocols.

  3. Compile: Use build tool do EDK II.

  4. Integre: Use UEFITool para inserir .efi no firmware do fabricante.

  5. Atualize: Flash via USB no UEFI setup.

  6. Teste: qemu-system-x86_64 -bios seu_firmware.rom.

4. Usar um Bootloader Alternativo (GRUB)

  1. Instale Grub2Win: Baixe do site oficial, instale como admin.

  2. Configure: Abra Grub2Win, edite grub.cfg para incluir:

  3. Copie binário: Coloque boot.bin na raiz do disco (ex.: C:\).

  4. Teste: Reinicie, selecione no menu GRUB.

5. Usar Dispositivo Externo (USB/CD)

  1. Compile programa: Crie boot.bin com NASM.

  2. Crie mídia: Baixe Rufus, use DD mode para gravar boot.bin em USB.

  3. Configure UEFI: Priorize USB no boot order.

  4. Teste: Reinicie, verifique execução.

Exemplo Prático: Hello no Boot

Compile com nasm -f bin boot.asm -o boot.bin e use com BCD ou USB.

Considerações Gerais

  • Ambiente: Bare-metal; gerencie hardware diretamente.

  • Segurança: Teste em QEMU; evite vulnerabilidades.

  • Hardware: Compatível com x86/x64.

  • Casos de Uso: Diagnóstico, recuperação.