|
3. 5Исследование готовых файлов 5
6.Диаграммы Диаграмма Структура загрузочного образа (hdd.img)
Сектора
| Название области
| Содержимое
| Описание
| 0
| MBR (Master Boot Record) Главная загрузочная область
| Код загрузчика (446 байт)
| GRUB stage 1, находится указатель на следующую часть (GRUB stage 1.5)
| Таблица разделов
| Содержит информацию о каждом разделе (у нас один раздел)
| 1-62
| Не занятая область (пустая, т.к. начало разделов выравнивается по 64 сектора)
| GRUB stage 1.5 (32 256 байт), содержит драйверы файловой системы и адрес GRUB stage 2 (через указание полного пути и имени файла)
| 63-16064
| Первый раздел, форматируется в файловую систему FAT32
| VBR (Volume Boot Record) Загрузочный сектор раздела
| Этот сектор отвечает за информацию о размере кластера, тип и размер используемой таблицы расположения файлов.
| Файловая система
| /boot/grub
| GRUB stage 2, содержит стандартный файл конфигурации и прочие модули
| /MiniOS.bin
| Исполняемый файл ядра Mini OS
|
Смещение
| Сегмент
| Содержимое
| Раздел
| 0x0000
|
| Заголовок ELF
|
| 0x002a
|
| Программные заголовки
Первый сегмент, LOAD
Второй сегмент, GNU_STACK
|
| 0x1000
| Первый сегмент
| Структура mboot
| .text
| 0x1020
| Исполняемый код, дополнен пустыми командами
| 0х3000
| Информация для обработки исключений
| .eh_frame
| 0х33bc
| Значения инициализированных переменных
| .data
| 0x4000
| Неинициализированные переменные (не занимает места, указывается размер в заголовке этого раздела)
| .bss
| 0х4000
| Комментарии (версия компилятора)
| .comment
| 0x401c
| Таблица названий разделов
| .shstrtab
| 0x404c
|
| Заголовки разделов, каждый по 40 байт, всего 7 (первый пустой)
|
| Таблица Структура исполняемого файла (MiniOS.bin)
Таблица Multiboot information structure
Начало
| Название поля
| Описание
| Условие корректного заполнения
| 0
| flags
| Флаги, какие части этой структуры корректно заполнены
| Обязательно присутствует
| 4 8
| mem_lower mem_upper
| Количество памяти (в килобайтах)
| Заполнены, если flags[0] (нулевой бит flags) установлен
| 12
| boot_device
| С какого диска было загружено ядро ОС
| flags[1]
| 16
| cmdline
| Содержит физический адрес командной строки передаваемой ядру
| flags[2]
| 20 24
| mods_count mods_addr
| Загруженные модули ядра и их адреса
| flags[3]
| 28 - 40
| syms
| Информация о таблице символов ядра
Или таблице разделов ELF файла ядра
| flags[4] или flags[5]
| 44
48
| mmap_length
mmap_addr
| Информация о “memory map”
| flags[6]
| 52 56
| drives_length drives_addr
| Информация о диске
| flags[7]
| 60
| config_table
| Таблица конфигурации, возвращаемая BIOS (INT 15, AH=C0h)
| flags[8]
| 64
| boot_loader_name
| Адрес названия загрузчика
| flags[9]
| 68
| apm_table
| Advanced Power Management
| flags[10]
| 72 76 80 82 84 86
| vbe_control_info vbe_mode_info vbe_mode vbe_intervace_seg vbe_interface_off vbe_interface_len
| Информация о поддерживаемых видеорежимах
| flags[11]
|
Таблица Содержимое Multiboot information structure в виртуальной машине QEMU
Таблица Содержимое GDT
Смещение
| Base
| Limit
| Access
| Granularity
| Описание сегмента
| 0x0
| 0x0
| 0x0
| 0
| 0x0
| Пустая запись
| 0x8
| 0x000000000
| 0xFFFFFFFF
| DPL=0 Type=Code
| 0xCF
| Кода в режиме ядра
| 0x10
| 0x000000000
| 0xFFFFFFFF
| DPL=0 Type=Data
| 0xCF
| Данные в режиме ядра
| 0x18
| 0x000000000
| 0xFFFFFFFF
| DPL=3 Type=Code
| 0xCF
| Код в режиме пользователя
| 0x20
| 0x000000000
| 0xFFFFFFFF
| DPL=3 Type=Data
| 0xCF
| Данные в режиме пользователя
|
Описание полей:
У нас nonGate http://www.iakovlev.org/index.html?p=8806&m=1&l1=7
Описание бита гранулярности http://www.wasm.ru/article/190
И здесь
http://habrahabr.ru/post/118881/
|
|
|