OSDev

для всех
Текущее время: 11 дек 2017, 19:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 22:14 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 22:25 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
pavia писал(а):
Предыстория. Изначально отладчик я делать не собирался.
Но появилась надобность. Был замечен баг в коде загрузчика, две недели бился над поискам места бага все стандартные средства провалились.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 11 апр 2013, 02:22 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 09 май 2013, 02:28 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Нашёл в документации на 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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 10 май 2013, 08:42 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Himik
Спасибо за WatchPoints обязательно посмотрю.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 07 авг 2013, 18:35 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 319
Откуда: Псковская обл.
Какой-нибудь препроцессор - разбивающий код инструкций х86 на свой микрокод?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB