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/ |