|
|
Регистрация | << Правила форума >> | 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. |
#7
|
|||
|
|||
Можно и поэкспериментировать, однако мне все же кажется учитывая задачи автора и то что то приложение которое он собирается запускать может разным, то лучше его изолировать, при этом из практики вирусописательства известно что приложение откуда запускается вирус часто вылетает. При том само первое приложение может влиять на работу второго негативным образом, а что вероятней так это то что ошибки второго приведут к жесткому зависанию первого из-за общего адресного пространства процессов, а представьте в такой ситуации плохой указатель и т.д., вобщем если это и возможно то весьма небезопасное решение. Нужны дополнительные средства мониторинга операций с памятью, особенно на запись. По крайней мере мне так кажется...
|
#8
|
||||
|
||||
Сохранение процесса. Гибернация.
Ладно раскрою все карты
Я НЕ собирался писать вирус как кто-то мог подумать Я хотел написать программу для сохранения процессов, эдакий аналог гибернации Vista/Seven, но зная что существует проблема с адресацией (запуская сохраненный процесс, может оказаться что адрес к котором он "стучится" уже заняты) решил реализовать описанный выше метод, но видимо не судьба... 1. Подскажите если кто знает, как работает гибернация и почему она может сохранять процессы, а МЫ нет? 2. Имеет ли какой-то смысл то что я написал выше? Возможно ли реализовать? |
#9
|
|||
|
|||
Цитата:
Копай эмуляторы Дело в том что там такая задача давно решена, ведь снимки виртуальной машины и есть та самая гибернация. Исходные тексты Virtual Box открыты и там можно найти много ценных решений, но он на С++ Цитата:
|
#10
|
|||
|
|||
Открываю и свои карты: мне нужно создать песочницу, как часть разрабатываемой системы безопасности(статус opensource ), пока работа идет над проактивной защитой, но вполне веорятно имеет смысл ее разрабатывать параллельно с sanbox, рабочий язык Delphi для всей системы безопасности. Так как задачи у нас схожие то вполне логично объединить усилия
|