Як запустити програму без операційної системи?


239

Як ви запускаєте програму самостійно без операційної системи? Чи можете ви створити програми складання, які комп'ютер може завантажувати та запускати при запуску, наприклад, завантажувати комп'ютер з флешки, і він запускає програму, що знаходиться на процесорі?


4
На якій архітектурі? x86? АРМ?
Кіссіель

1
Я говорив загалом, але, швидше за все, x86 або x64
user2320609

2
так, саме так завантажуються процесори. не обов’язково бути складанням, C часто використовується з небагато asm для завантажувальної програми та, можливо, іншої підтримки.
old_timer

24
Подумайте: якби такої можливості не було, як би сама ОС запускалася і запускалася? :)
Сева Алексєєва

Відповіді:


153

Як ви запускаєте програму самостійно без операційної системи?

Ви розміщуєте свій двійковий код у тому місці, де процесор шукає після перезавантаження (наприклад, адреса 0 в ARM).

Чи можете ви створити програми складання, які комп'ютер може завантажувати та запускати при запуску (наприклад, завантажте комп'ютер із флешки та він запускає програму, що знаходиться на диску)?

Загальна відповідь на питання: це можна зробити. Його часто називають "програмуванням на голий метал". Щоб читати з флешки, ви хочете знати, що таке USB, і ви хочете мати якийсь драйвер для роботи з цим USB. Програма на цьому диску також повинна бути в якомусь конкретному форматі, в якійсь конкретній файловій системі ... Це зазвичай роблять завантажувачі, але ваша програма може включати в себе власний завантажувач, щоб вона була самодостатньою, якщо тільки прошивка буде завантажте невеликий блок коду.

Багато плат ARM дозволяють вам робити деякі з цих дій. У деяких є завантажувачі, які допоможуть вам у базовій налаштуванні.

Тут ви можете знайти чудовий посібник про те, як зробити базову операційну систему на Raspberry Pi.

Редагувати: Ця стаття, і весь wiki.osdev.org відповість на більшість ваших питань http://wiki.osdev.org/Introduction

Крім того, якщо ви не хочете експериментувати безпосередньо на апаратному забезпеченні, ви можете запустити його як віртуальну машину за допомогою гіпервізорів, таких як qemu. Дивіться, як запустити "привіт світ" безпосередньо на віртуалізованому апаратному забезпеченні ARM тут .


723

Приклади, які можна виконати

Давайте створимо та запустимо декілька мізерних програм зі світовим привітним голим привіт, які працюють без ОС на:

Ми також максимально випробуємо їх на емуляторі QEMU, оскільки це безпечніше і зручніше для розвитку. Тести QEMU пройшли на хості Ubuntu 18.04 з попередньо упакованим QEMU 2.11.1.

Код усіх прикладів x86, наведених нижче, та більше можна знайти на цьому репортажі GitHub .

Як запустити приклади на реальному технічному забезпеченні x86

Пам’ятайте, що використання прикладів із реальним обладнанням може бути небезпечним, наприклад, ви можете помилкою витерти диск або заштрихувати це обладнання: зробіть це лише на старих машинах, які не містять критичних даних! Або ще краще, використовуйте дешеві напів одноразові девборди, такі як Raspberry Pi, дивіться приклад ARM нижче.

Для типового ноутбука x86 ви повинні зробити щось на кшталт:

  1. Запишіть зображення на USB-накопичувач (знищить ваші дані!):

    sudo dd if=main.img of=/dev/sdX
    
  2. підключіть USB до комп'ютера

  3. Увімкніть його

  4. скажіть це завантажуватися з USB.

    Це означає змусити прошивку вибрати USB перед жорстким диском.

    Якщо це не поведінка вашої машини за замовчуванням, продовжуйте натискати клавіші Enter, F12, ESC або інші такі дивні клавіші після ввімкнення живлення, поки ви не отримаєте меню завантаження, де ви можете вибрати для завантаження з USB.

    У цих меню часто можливо налаштувати порядок пошуку.

Наприклад, на своєму T430 я бачу таке.

Після ввімкнення в цей момент мені потрібно натиснути Enter, щоб увійти до меню завантаження:

введіть тут опис зображення

Потім тут я повинен натиснути F12, щоб вибрати USB як завантажувальний пристрій:

введіть тут опис зображення

Звідти я можу вибрати USB як завантажувальний пристрій, як це:

введіть тут опис зображення

Крім того, щоб змінити порядок завантаження і вибрати USB, щоб він мав вищий пріоритет, тому мені не доведеться щоразу вибирати його вручну, я натискаю клавішу F1 на екрані "Меню переривання при запуску", а потім перейдіть до:

введіть тут опис зображення

Завантажувальний сектор

На x86 найпростіша річ і найнижчий рівень - це створити головний завантажувальний сектор (MBR) , що є типом завантажувального сектора , а потім встановити його на диск.

Тут ми створюємо один printfзаклик:

printf '\364%509s\125\252' > main.img
sudo apt-get install qemu-system-x86
qemu-system-x86_64 -hda main.img

Результат:

введіть тут опис зображення

Зауважте, що навіть не роблячи нічого, на екрані вже надруковано кілька символів. Вони надруковані вбудованим програмним забезпеченням і служать для ідентифікації системи.

А на T430 ми просто отримуємо порожній екран з миготливим курсором:

введіть тут опис зображення

main.img містить наступне:

  • \364у octal == 0xf4в шістнадцятковій версії: кодування hltінструкції, яке повідомляє ЦП припинити роботу.

    Тому наша програма нічого не зробить: лише запустити та зупинити.

    Ми використовуємо восьмеричні, оскільки \xшістнадцяткові числа не визначені POSIX.

    Ми могли легко отримати це кодування за допомогою:

    echo hlt > a.S
    as -o a.o a.S
    objdump -S a.o
    

    який виводить:

    a.o:     file format elf64-x86-64
    
    
    Disassembly of section .text:
    
    0000000000000000 <.text>:
       0:   f4                      hlt
    

    але це також задокументовано в посібнику Intel, звичайно.

  • %509sвиробляють 509 просторів. Потрібно заповнити файл до байта 510.

  • \125\252в вісімковій == 0x55слід 0xaa.

    Це 2 необхідні магічні байти, які повинні бути байтами 511 та 512.

    BIOS проходить через усі наші диски, шукаючи завантажувальні, і він вважає завантажувальним лише ті, у яких є ці два магічні байти.

    Якщо його немає, обладнання не сприйме це як завантажувальний диск.

Якщо ви не printfмайстер, ви можете підтвердити вміст за main.imgдопомогою:

hd main.img

який показує очікуване:

00000000  f4 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000001f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 55 aa  |              U.|
00000200

де 20пробіл в ASCII.

Прошивка BIOS зчитує ці 512 байти з диска, додає їх у пам'ять і встановлює ПК на перший байт, щоб почати їх виконання.

Привіт світовий завантажувальний сектор

Тепер, коли ми зробили мінімальну програму, перейдемо до привітного світу.

Очевидне питання: як зробити IO? Кілька варіантів:

  • попросіть прошивку, наприклад, BIOS або UEFI, зробити це для нас

  • VGA: спеціальна область пам'яті, яка надрукується на екрані, якщо записана на. Можна використовувати в захищеному режимі.

  • написати драйвер і поговорити безпосередньо з обладнанням дисплея. Це "правильний" спосіб це зробити: більш потужний, але складніший.

  • серійний порт . Це дуже простий стандартизований протокол, який надсилає та приймає символи з хост-терміналу.

    На робочих столах це виглядає приблизно так:

    введіть тут опис зображення

    Джерело .

    Він, на жаль, не представлений на більшості сучасних ноутбуків, але це звичайний шлях для розробки плат, див. Приклади ARM нижче.

    Це справді прикро, оскільки такі інтерфейси дуже корисні, наприклад, для налагодження ядра Linux .

  • використовувати функції налагодження чіпів. ARM називає їх напівхостинг, наприклад. Що стосується реального обладнання, воно потребує додаткової апаратної та програмної підтримки, але на емуляторах це може бути безкоштовна зручна опція. Приклад .

Тут ми зробимо приклад BIOS, як це простіше на x86. Але зауважте, що це не самий надійний метод.

головний.С

.code16
    mov $msg, %si
    mov $0x0e, %ah
loop:
    lodsb
    or %al, %al
    jz halt
    int $0x10
    jmp loop
halt:
    hlt
msg:
    .asciz "hello world"

GitHub вище за течією .

link.ld

SECTIONS
{
    /* The BIOS loads the code from the disk to this location.
     * We must tell that to the linker so that it can properly
     * calculate the addresses of symbols we might jump to.
     */
    . = 0x7c00;
    .text :
    {
        __start = .;
        *(.text)
        /* Place the magic boot bytes at the end of the first 512 sector. */
        . = 0x1FE;
        SHORT(0xAA55)
    }
}

Зберіть і зв’яжіть із:

as -g -o main.o main.S
ld --oformat binary -o main.img -T link.ld main.o
qemu-system-x86_64 -hda main.img

Результат:

введіть тут опис зображення

А на Т430:

введіть тут опис зображення

Тестовано на: Lenovo Thinkpad T430, UEFI BIOS 1.16. Диск, створений на хості Ubuntu 18.04.

Окрім стандартних інструкцій зі зборки, ми маємо:

  • .code16: повідомляє GAS виводити 16-бітний код

  • cli: вимкнути переривання програмного забезпечення. Це може змусити процесор знову почати працювати післяhlt

  • int $0x10: робить виклик BIOS Це те, що друкує персонажів один за одним.

Важливими прапорами посилань є:

  • --oformat binary: виведіть необроблений бінарний код складання, не загортайте його у файл ELF, як це стосується звичайних виконуваних файлів.

Щоб краще зрозуміти частину сценарію зв’язувача, ознайомтеся з етапом переїзду посилання: Що роблять посилання?

Програми голого металу Cooler x86

Ось кілька складніших налаштувань голого металу, яких я досяг:

Використовуйте C замість складання

Підсумок: використовуйте багатозавантажувальний пристрій GRUB, який вирішить безліч прикрих проблем, про які ви ніколи не думали. Дивіться розділ нижче.

Основна складність x86 полягає в тому, що BIOS завантажує лише 512 байт з диска в пам'ять, і ви, ймовірно, підірвете ці 512 байти при використанні C!

Для вирішення цього питання ми можемо використовувати двоступеневий завантажувач . Це робить подальші дзвінки BIOS, які завантажують більше байтів з диска в пам'ять. Ось мінімальний приклад складання 2 етапу з нуля за допомогою int 0x13 викликів BIOS :

Як варіант:

  • якщо вам це потрібно лише для роботи в QEMU, але не справжнього обладнання, скористайтеся -kernelопцією, яка завантажує в пам'ять весь файл ELF. Ось приклад ARM, який я створив за допомогою цього методу .
  • для Raspberry Pi прошивка за замовчуванням піклується про завантаження для нас зображення з файлу ELF, названого так kernel7.img, як -kernelце робить QEMU .

Для освітніх цілей, ось один етап приклад мінімальний C :

main.c

void main(void) {
    int i;
    char s[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
    for (i = 0; i < sizeof(s); ++i) {
        __asm__ (
            "int $0x10" : : "a" ((0x0e << 8) | s[i])
        );
    }
    while (1) {
        __asm__ ("hlt");
    };
}

запис.S

.code16
.text
.global mystart
mystart:
    ljmp $0, $.setcs
.setcs:
    xor %ax, %ax
    mov %ax, %ds
    mov %ax, %es
    mov %ax, %ss
    mov $__stack_top, %esp
    cld
    call main

linker.ld

ENTRY(mystart)
SECTIONS
{
  . = 0x7c00;
  .text : {
    entry.o(.text)
    *(.text)
    *(.data)
    *(.rodata)
    __bss_start = .;
    /* COMMON vs BSS: /programming/16835716/bss-vs-common-what-goes-where */
    *(.bss)
    *(COMMON)
    __bss_end = .;
  }
  /* /programming/53584666/why-does-gnu-ld-include-a-section-that-does-not-appear-in-the-linker-script */
  .sig : AT(ADDR(.text) + 512 - 2)
  {
      SHORT(0xaa55);
  }
  /DISCARD/ : {
    *(.eh_frame)
  }
  __stack_bottom = .;
  . = . + 0x1000;
  __stack_top = .;
}

бігати

set -eux
as -ggdb3 --32 -o entry.o entry.S
gcc -c -ggdb3 -m16 -ffreestanding -fno-PIE -nostartfiles -nostdlib -o main.o -std=c99 main.c
ld -m elf_i386 -o main.elf -T linker.ld entry.o main.o
objcopy -O binary main.elf main.img
qemu-system-x86_64 -drive file=main.img,format=raw

C стандартна бібліотека

Речі стають веселішими, якщо ви також хочете використовувати стандартну бібліотеку C, оскільки у нас немає ядра Linux, яке реалізує значну частину стандартних функцій бібліотеки С через POSIX .

Кілька можливостей, не звертаючись до повномасштабної ОС на зразок Linux, включають:

  • Напишіть своє. Це лише купа заголовків та файлів С, врешті-решт, правда? Правильно ??

  • Ньюліб

    Детальний приклад за адресою: /electronics/223929/c-standard-libraries-on-bare-metal/223931

    Newlib реалізує всі нудне , НЕ OS конкретних речей для вас, наприклад memcmp, memcpyі т.д.

    Потім він надає вам декілька заглушок для здійснення системних дзвінків, які вам потрібні самі.

    Наприклад, ми можемо реалізувати exit()на ARM через напівгостінг із:

    void _exit(int status) {
        __asm__ __volatile__ ("mov r0, #0x18; ldr r1, =#0x20026; svc 0x00123456");
    }
    

    як показано в цьому прикладі .

    Наприклад, ви можете перенаправити printfна системи UART або ARM або реалізувати за exit()допомогою напівгостінгу .

  • вбудовані операційні системи, такі як FreeRTOS та Zephyr .

    Такі операційні системи, як правило, дозволяють вимкнути попереднє планування, тому надаючи вам повний контроль над виконанням програми.

    Їх можна розглядати як свого роду попередньо реалізований Newlib.

GNU GRUB Multiboot

Завантажувальні сектори прості, але вони не дуже зручні:

  • Ви можете мати лише одну ОС на диску
  • код навантаження повинен бути дійсно невеликим і вміщуватися в 512 байт
  • вам доведеться робити багато запуску самостійно, як перейти в захищений режим

Саме з цих причин GNU GRUB створив більш зручний формат файлу під назвою multiboot.

Мінімальний робочий приклад: https://github.com/cirosantilli/x86-bare-metal-examples/tree/d217b180be4220a0b4a453f31275d38e697a99e0/multiboot/hello-world

Я також використовую його на моїх прикладах GitHub repo, щоб мати можливість легко запускати всі приклади на реальному обладнання, не спалюючи USB мільйон разів.

Результат QEMU:

введіть тут опис зображення

T430:

введіть тут опис зображення

Якщо ви готуєте вашу ОС як багатозавантажувальний файл, то GRUB зможе знайти її у звичайній файловій системі.

Саме це робить більшість дистрибутивів, підкладаючи зображення ОС /boot.

Файли з декількома завантаженнями - це в основному файл ELF зі спеціальним заголовком. Вони визначені GRUB за адресою: https://www.gnu.org/software/grub/manual/multiboot/multiboot.html

Ви можете перетворити багатозавантажений файл на завантажувальний диск за допомогою grub-mkrescue.

Прошивки

По правді кажучи, ваш завантажувальний сектор - це не перше програмне забезпечення, яке працює на процесорі системи.

Насправді спочатку працює так звана прошивка , яка є програмним забезпеченням:

  • виготовлені виробниками обладнання
  • як правило, із закритим джерелом, але, ймовірно, на основі С
  • зберігається в пам'яті лише для читання, а тому важче / неможливо змінити без згоди продавця.

Добре відомі прошивки включають:

  • БІОС : стара загальноприйнята прошивка x86. SeaBIOS - це реалізація з відкритим кодом за замовчуванням, що використовується QEMU.
  • UEFI : наступник BIOS, краще стандартизований, але більш здатний і неймовірно роздутий.
  • Coreboot : шляхетна спроба з відкритим вихідним кодом

Прошивка робить такі речі:

  • петлю на кожному жорсткому диску, USB, мережі тощо, поки ви не знайдете щось завантажувальне.

    Коли ми запускаємо QEMU, він -hdaкаже, що main.imgце жорсткий диск, підключений до апаратного забезпечення, і hdaце перший, який слід спробувати, і він використовується.

  • завантажте перші 512 байти на адресу оперативної пам’яті 0x7c00, покладіть туди RIP процесора та нехай він працює

  • показувати на дисплеї такі речі, як меню завантаження або виклики друку BIOS

Прошивка пропонує ОС-подібний функціонал, від якого залежить більшість ОС. Наприклад, підмножина Python перенесена для роботи в BIOS / UEFI: https://www.youtube.com/watch?v=bYQ_lq5dcvM

Можна стверджувати, що прошивки не відрізняються від ОС, і що прошивка - це єдине "справжнє" програмування голих металів.

Як каже цей розробник CoreOS :

Важка частина

Коли ви вмикаєте ПК, мікросхеми, що складають чіпсет (northbridge, southbridge та SuperIO), ще не ініціалізуються належним чином. Навіть незважаючи на те, що BIOS ROM настільки віддалений від процесора, як це міг бути, це доступно процесору, оскільки він повинен бути, інакше процесор не матиме інструкцій виконувати. Це не означає, що BIOS ROM повністю відображений, як правило, ні. Але достатньо лише карти, щоб розпочати процес завантаження. Будь-які інші пристрої, просто забудьте про це.

Коли ви запускаєте Coreboot під QEMU, ви можете експериментувати з більш високими шарами Coreboot і з корисними навантаженнями, але QEMU пропонує мало можливостей експериментувати з початковим кодом низького рівня. З одного боку, оперативна пам’ять просто працює з самого початку.

Опублікувати початковий стан BIOS

Як і багато речей у техніці, стандартизація є слабкою, і одна з речей, на яку не слід покладатися, - це початковий стан регістрів, коли ваш код починає працювати після BIOS.

Тож зробіть собі прихильність і використовуйте код ініціалізації, наприклад: https://stackoverflow.com/a/32509555/895245

Реєстри подобаються %dsі %esмають важливі побічні ефекти, тому вам слід скасувати їх, навіть якщо явно їх не використовуєте.

Зауважте, що деякі емулятори приємніші за реальне обладнання та дають хороший початковий стан. Потім, коли ви переходите на реальне обладнання, все ламається.

El Torito

Формат, який можна записати на компакт-диски: https://en.wikipedia.org/wiki/El_Torito_%28CD-ROM_standard%29

Можна також створити гібридне зображення, яке працює на ISO або USB. Це можна зробити за допомогою grub-mkrescue( приклад ), а також зробити ядро ​​Linux при make isoimageвикористанні isohybrid.

ARM

У ARM загальні ідеї однакові.

Немає широко доступних напівстандартизованих попередньо встановлених мікропрограмних програм, таких як BIOS, для використання в IO, тому два найпростіші типи IO, які ми можемо зробити, це:

  • серійний, який широко доступний на розробниках
  • блимає світлодіод

Я завантажив:

Деякі відмінності від x86 включають:

  • IO робиться, записуючи на магічні адреси безпосередньо, немає inі outінструкцій.

    Це називається IO пам'яті, відображеної в пам'яті .

  • для деяких справжніх апаратних засобів, таких як Raspberry Pi, ви можете самостійно додати прошивку (BIOS) до образу диска.

    Це гарна річ, оскільки робить оновлення прошивки більш прозорим.

Ресурси

  • http://wiki.osdev.org - чудове джерело для цих питань.
  • https://github.com/scanlime/metalkit - це більш автоматизована / загальна система складання голого металу, яка забезпечує крихітний спеціальний API

3
Unikernels - це альтернатива людям, які не можуть / не хочуть переходити на такий низький рівень і все ще хочуть отримати користь від дуже низького сліду.
AndreLDM

1
@AndreLDM Я був на межі додати, що новини Unikernel на базі Linux, але ще відчуваю себе занадто різкими: next.redhat.com/2018/11/14/ukl-a-unikernel-based-on-linux
Ciro Santilli 郝海东 冠状 病六四 事件 法轮功

14
Дійсно детальна відповідь, але "програма, яка працює без ОС - це ОС", не відповідає дійсності. Ви можете написати програму, яка просто спалахує / вимикає світлодіод, але це не робить ОС. Деякий код вбудованого програмного забезпечення, який запускає мікроконтролер на вашій флешці, не робить його ОС. ОС є як мінімум шаром абстракції, щоб легше писати інше програмне забезпечення. Як мінімум в ці дні я б сказав, якщо немає планувальника, швидше за все, це не ОС.
Віталій

4
Хороша відповідь, за винятком абсолютної дурниці, що будь-яка програма, яка не працює в ОС, - це ОС.
допитливий

3
@MichaelPetch ей, просто щоб зберегти нуль у завантажувальному секторі :-) Напевно, не варто.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3

Операційна система як натхнення

Операційна система також є програмою , тому ми також можемо створити власну програму, створивши з нуля або змінивши (обмеживши або додавши) функції однієї з невеликих операційних систем , а потім запустити її під час завантажувального процесу (використовуючи зображення ISO ) .

Наприклад, ця сторінка може використовуватися як відправна точка:

Як написати просту операційну систему

Тут вся Операційна система повністю вписується в 512-байтний завантажувальний сектор ( MBR )!

Такі чи подібні прості ОС можна використовувати для створення простого фреймворку, який дозволить нам:

змусити завантажувач завантажити наступні сектори на диск в оперативну пам’ять і перейти до цієї точки, щоб продовжити виконання . Або ви можете прочитати на FAT12, файловій системі, що використовується на дискетах, і реалізувати це .

Однак можливостей є багато. Наприклад, щоб побачити більшу ОС на мові збірки x86, ми можемо дослідити операційну систему MykeOS , x86, яка є навчальним інструментом для показу простих 16-бітних, операційних ОС в реальному режимі, з добре коментованим кодом та великою документацією .

Завантажувач як натхнення

Іншими поширеними програмами, які працюють без операційної системи, є також завантажувачі завантаження . Ми можемо створити програму, натхненну такою концепцією, наприклад, використовуючи цей сайт:

Як розробити власний завантажувач

У наведеній статті представлена ​​також основна архітектура таких програм :

  1. Правильне завантаження в пам'ять за 0000: 7C00 адресою.
  2. Виклик функції BootMain , розробленої мовою високого рівня.
  3. На дисплеї відобразіть повідомлення "" Привіт, світ ... ", із низького рівня".

Як ми бачимо, ця архітектура дуже гнучка і дозволяє реалізувати будь-яку програму , не обов’язково завантажувача.

Зокрема, в ній показано, як використовувати техніку "змішаного коду", завдяки якій можна комбінувати конструкції високого рівня (від C або C ++ ) з командами низького рівня (від Assembler ). Це дуже корисний метод, але ми повинні пам’ятати про це:

для складання програми та отримання виконуваного файлу вам знадобиться компілятор і лінкер Assembler для 16-бітного режиму . Для C / C ++ вам знадобиться лише компілятор, який може створювати об’єктні файли для 16-бітного режиму .

У статті також показано, як бачити створену програму в дії та як виконати її тестування та налагодження.

Програми UEFI як натхнення

Наведені вище приклади використовували факт завантаження сектору MBR на носій інформації. Тим НЕ менше, ми можемо йти далі в глибину по Тропангплангу, наприклад , з UEFI додатками :

Крім завантаження ОС, UEFI може запускати програми UEFI, які розміщуються як файли на системному розділі EFI. Вони можуть бути виконані з командної оболонки UEFI, менеджером завантаження програмного забезпечення або іншими програмами UEFI. Програми UEFI можна розробляти та встановлювати незалежно від виробника системи.

Типом програми UEFI є завантажувач ОС, такий як GRUB, rEFInd, Gummiboot та Windows Boot Manager; який завантажує файл ОС в пам'ять і виконує його. Також завантажувач ОС може надати користувальницький інтерфейс, щоб дозволити запуск іншого програми UEFI. Утиліти, такі як оболонка UEFI, також є програмами UEFI.

Якщо ми хотіли б розпочати створення таких програм , ми можемо, наприклад, почати з цих веб-сайтів:

Програмування для EFI: Створення програми "Привіт, світ" / Програмування UEFI - перші кроки

Вивчення питань безпеки як натхнення

Добре відомо, що існує ціла група шкідливого програмного забезпечення (це програми), що працює до запуску операційної системи .

Величезна група з них працює на секторі MBR або програмах UEFI, як і у всіх вищезазначених рішеннях, але є й такі, що використовують іншу точку входу, наприклад запис запису обсягу завантаження (VBR) або BIOS :

Існує щонайменше чотири відомих вірусу атаки BIOS , два з яких були для демонстрації.

чи, можливо, ще один.

Атаки перед запуском системи

Бут-коти еволюціонували від розробки доказів-концепції до масового розповсюдження і тепер фактично стали програмним забезпеченням з відкритим кодом .

Різні способи завантаження

Я також думаю, що в цьому контексті також варто згадати, що існують різні форми завантаження операційної системи (або виконуваної програми, призначеної для цього) . Є багато, але я хотів би звернути увагу на завантаження коду з мережі за допомогою параметра Network Boot ( PXE ), що дозволяє нам запускати програму на комп’ютері незалежно від її операційної системи і навіть незалежно від будь-якого носія інформації, що є безпосередньо підключений до комп'ютера:

Що таке мережеве завантаження (PXE) і як ви можете ним користуватися?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.