OSDev
http://osdev.su/

Эмулятор
http://osdev.su/viewtopic.php?f=22&t=735
Страница 2 из 2

Автор:  scuter [ 06 апр 2013, 22:14 ]
Заголовок сообщения:  Re: Эмулятор

думаю для этого надо изучить VMX SVM комманды, у интел они называются TV-X TV-D
потом как то определиться с биосом его можно ******** из существующих VM
и наконецто эмуляция оборудование.

я копался в этом деле но найти способ реализации Эмулята пока не смог.

За мат буду банить. SII

Автор:  Himik [ 06 апр 2013, 22:25 ]
Заголовок сообщения:  Re: Эмулятор

pavia писал(а):
Предыстория. Изначально отладчик я делать не собирался.
Но появилась надобность. Был замечен баг в коде загрузчика, две недели бился над поискам места бага все стандартные средства провалились.

Давай на форуме посмотрим твой баг, может быть всё не так страшно.

Автор:  Himik [ 11 апр 2013, 02:22 ]
Заголовок сообщения:  Re: Эмулятор

Есть простое решение для отладки загрузчика - использовать любой отладчик реального режима. Отладчиком можно загрузить бинарный файл по адресу 7C00, поставить точки перехвата обращения к памяти, поставить программный указатель на 7C00 и пошагово трассировать.

А чтобы вызывать BIOS из 64-битного режима, перед вызовом BIOS можно делать переход в 32-битный режим, и в этом режиме запускать задачу типа VM86. Потом обратный переход. Это не особо сложно.

Автор:  Himik [ 09 май 2013, 02:28 ]
Заголовок сообщения:  Re: Эмулятор

Нашёл в документации на Bochs команду перехвата обращения к памяти
Цитата:
Глава 8.12. Using Bochs internal debugger
8.12.3. Memory WatchPoints
watch read addr Insert a read watch point at physical address addr
watch r addr Insert a read watch point at physical address addr

watch write addr Insert a write watch point at physical address addr
watch w addr Insert a write watch point at physical address addr

watch Display state of current memory watchpoints

watch stop Stop simulation when a watchpoint is encountered (default)
watch continue Do not stop simulation when a watchpoint is encountered

unwatch addr Remove watchpoint to specific physical address
unwatch Remove all watch points

trace-mem on/off Enable/Disable memory access tracing

Попробовал, сработало
Цитата:
E:\XPR\Release>"D:\Program Files (x86)\Bochs-2.6\bochsdbg.exe" -q
========================================================================
Bochs x86 Emulator 2.6
Built from SVN snapshot on September 2nd, 2012
Compiled on Sep 2 2012 at 20:36:35
========================================================================
00000000000i[ ] reading configuration from bochsrc.txt
00000000000i[ ] installing win32 module as the Bochs GUI
00000000000i[ ] using log file bochsout.txt
Next at t=0
(0) [0x00000000fffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0
<bochs:1> watch w 0x10000
write watchpoint at 0x0000000000010000 len=1 inserted
<bochs:2> c
(0) Caught write watch point at 0x0000000000010000
Next at t=45539573
(0) [0x00000000000f31b5] f000:31b5 (unk. ctxt): rep insd dword ptr es:[di], dx ; f3666d

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

Автор:  pavia [ 10 май 2013, 08:42 ]
Заголовок сообщения:  Re: Эмулятор

Himik
Спасибо за WatchPoints обязательно посмотрю.

Докладываю как идут дела над эмулятором. Занялся командами 386 было набрано большинство команд. Работы осложняются тем что по факту мы имеем не одну таблицу, а 4 таблицы из за комбинации префиксов 66h, 67h. Многие команды сильно изменяются от изменения размера операнда. К примеру jmp, если размер 16 то адрес циклически обрезается до IP. Если 32 то результат заноситься в EIP.

Сейчас на эмулятор навешены механизм тестирования и он жутко медленный и требуется ускорение. Поэтому в плане: 1) Архитектуру надо перепланировать так чтобы сложные, команды были разбиты на простые.
2) Ввести понятие микропрограммы, для команд требующих более 3 входных и 2 выходных регистров.
3) Сделать кэш команд.

Автор:  iz56 [ 07 авг 2013, 18:35 ]
Заголовок сообщения:  Re: Эмулятор

Какой-нибудь препроцессор - разбивающий код инструкций х86 на свой микрокод?

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/