|
3. 5Исследование готовых файлов 5
3.4Основные инструменты 3.4.1Виртуальная машина Qemu Управление
Ctrl + Alt - вернуть мышку
Ctrl + Alt + 2 - открыть консоль команд
Ctrl + Up – перемещение вверх в консоли команд
Команды в консоли команд
x/152hx 0x7c00 - просмотр 152 слов виртуальной памяти
xp/152hx 0x7c00 – просмотр 152 слов физической памяти
pmemsave 0 0xffffff file_name – сохранение дампа памяти в файл
info registers - вывод полного содержимого внутренних регистров машины, включая скрытое состояние селекторов сегментов, локальную (LDT) и глобальную (GDT) таблицы дескрипторов и регистр задачи. Виртуальный ЦП считывает скрытое состояние из GDT/LDT, когда загружает селектор сегмента. Ниже приведено содержимое CS при работе ядра JOS и значения каждого поля: CS =0008 10000000 ffffffff 10cf9a00 DPL=0 CS32 [-R-] CS =0008 Видимая часть селектора сегмента. Значение селектора сегмента равно 0x8. Это означает, что мы ссылаемся на глобальную таблицу дескрипторов (0x8&4=0), текущий уровень привилегий (CPL, current privilege level) равен 0x8&3=0. 10000000 Начало этого сегмента. Linear address = logical address + 0x10000000. ffffffff Граница этого сегмента. Линейные адреса более 0xffffffff вызовут исключение «нарушение границы сегмента». 10cf9a00 Флаги для этого сегмента, значения которых QEMU декодирует в следующих нескольких полях. DPL=0 Уровень привилегий для этого сегмента. Только процесс с уровнем 0 может загрузить этот сегмент. CS32 Это 32-разрядный сегмент кода. Другие возможные значения: DS (сегмент данных) и LDT (локальная таблица дескрипторов). [-R-]
system_reset — перезапуск исполняемой программы
Запуск загрузочной флешки с именем устройства sdb в виртуальной машине: sudo chown username /dev/sdb qemu-system-i386 -hda /dev/sdb
Документация по QEMU http://www.opennet.ru/docs/RUS/qemu_doc/
Отладчик GDB Отладчик использует скрипт инициализации .gdbinit, в нём можно отредактировать необходимые параметры.
Команды отладки
с – continue
n – next
s – into
p – вывод значения переменной
b main – точка останова на имени функции
b *0x7C00 – точка остановка на адресе
watch *0xb8000 – точка останова на изменение памяти по адресу
x /2 $pc – посмотреть три следующие инструкции
si – выполнить одну инструкцию
Инструкция: http://server.179.ru/tasks/gdb/
3.5Исследование готовых файлов Дизассемблирование исполняемого файла objdump MiniOS.bin.dbg -D > MiniOS.txt
Просмотр файла в hex hexdump -n 512 -s 10
Просмотр “program header” исполняемого файла readelf -l
Просмотр “section header” исполняемого файла readelf -S
4.Файлы проекта 4.1Список файлов Makefile основной makefile, автоматизирует создание загрузочного образа hdd.img см. Сборка загрузочного образа (hdd.img)
hdd.img загрузочный образ MiniOS см. Error: Reference source not found
run_qemu.sh запуск загрузочного образа hdd.img в виртуальной машине Qemu
run_qemu_dbg.sh запуск загрузочного образа hdd.img в виртуальной машине Qemu c отладчиком GDB
to_flash.sh запись загрузочного образа hdd.img на USB Flash
.gdbinit скрипт инициализации отладчика GDB
4.1.1Папка grub/ Файлы загрузчика
fat_stage1_5 промежуточная часть, содержит драйвер файловой системы fat32
stage1 начальная часть, записывается в MBR
stage2 основная часть
menu.lst файл конфигурации загрузчика
4.1.2Папка src/ Исходный код ядра
MiniOS.bin исполняемый файл ядра см. Исследование исполняемого файла MiniOS
MiniOS.bin.dbg исполняемый файл ядра с отладочной информацией для dbg
Makefile производит компиляцию исходных кодов ядра см. Компиляция исходных кодов ядра
link.ld скрипт компоновщика описан: Скрипт компоновщика
common.h
common.c
descriptor_tables.h
descriptor_tables.c
isr.h
isr.c
monitor.h
monitor.c
timer.c
multiboot.h
timer.h
main.c
boot.s
gdt.s
interrupt.s
|
|
|