![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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.  |