|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Эмулятор адресации ОЗУ?
Всем доброе время суток!
Хочу спросить у знатоков и форумчан, если кто знает, как можно реализовать такой алгоритм и что для этого нужно: 1. Есть программа№1 (любая), она занимает какое-то адресное пространство после своего запуска, естественно что адресация начинается не с нуля с какого-то неизвестного значения (просто свободные ячейки памяти). 2. Хочу написать программу№2 (эмулятор), посредством которой я мог бы запустить программу№1 и она думала бы, что ее адресация начинается с N по M (где N и M указываю я. N - фиксированное, неизменное значение). В общем получается некое подобие Виртуальной машины, только гораздо проще. Надеюсь что все объяснил грамотно, очень рассчитываю на вашу помощь!!! P.S. Хватит ли возможностей Delphi, чтобы реализовать такую задумку? |
#2
|
||||
|
||||
На Delphi можно сделать но без выбора адреса (его прога сама выберет - скорее всего внутри своего адресного пространства).
На асме просто записать прогу по любому адресу, например: Код:
Цикл: mov eax, Значение mov [Адрес], eax Если написать драйвер то можна обращяться по любым адресам, но может вылетать синий экран если не туда обратишся. |
#3
|
||||
|
||||
2 AND_REY
Видимо не очень толково я все изъяснил . Я хочу чтобы все адреса оставались на месте и не в коем случае не собираюсь посягать на адреса в которых лежит ядро системы (синий экран мне не нужен). Меня интересует принцип похожий на виртуальную машину, когда моя программа№2(эмулятор) заняла адресное пространство и уже из этой программы, в ее адресном пространстве (размер которого определяю я) запускаю прикладную программу. А цель, чтоб для прикладной программы адреса были не реальными, а виртуальными (то есть реальный адрес 8088, а прикладная программа думает что этот адрес 0000). Надеюсь теперь все будет понятно, спасибо что отозвались!!! Жду ваших советов. |
#4
|
|||
|
|||
Ну смотрите(быть может я не прав!), фактически вы хотите породить процесс, а Windows дает нам только такие решения: CreateProcess, но Win никогда не допустит общего адресного пространства у двух процессов, кроме общих точек при IPC ну и оно и понятно, ведь это приведет к проблемам при чтении/записи данных,если код запускать как поток при помощи CreateThread то тем более такие вольности с адресом не позволит.Похоже Вам нувжно писать собственный эмулятор и особенно гипервизор, чтобы перехватывать привилегированные инструкции, руководство по написанию виртуальных машин есть на wasm, а как пример возьмите qemu или Virtual Box
|
#5
|
|||
|
|||
Так как без дров похоже не обойтись, то придется использовать C (driver) и Delphi (usermode application) управления процессом эмуляции, в принципе мне то же надо писать эмулятор, если Вам интересно то давайте объединяться, если что пишите в личку
|
#6
|
||||
|
||||
Может можна обойтись без драйверов и ограничений системы.
Использовать дельта-смещения в своём эмуляторе. Вырезка с одного сайта: Цитата:
Извеняюсь за материал противоречящий правилам сайта. Последний раз редактировалось AND_REY, 24.01.2010 в 16:51. |