Страница 1 из 2
		
			
				Обратный ход
				
Добавлено: 
18.09.2008 15:48:18 bw
				В качестве эксперимента.
Что вы думаете о существовании такой инстукции (оператора/директивы/функции) или группы инструкций, котороые бы позволяли изменить стандартную (с младших адресов в сторону старших) трассировку (выполнение) инструкций на обратную, т.е. процессор, получив такой пинок, пошол бы разбирать инструкции в обратном направлении?
Пока не представляю как это можно использовать, но идея забавная :-).
p.s. Поясню. В реальных условиях под инструкциями можно (нужно?) понимать операторы языка и прочее, чем последний оперирует.
..bw
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
18.09.2008 15:53:03 alexs
				а разве можно интерпретировать команды процессора в обратном направлении? там будет не однозначность сплошная
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 10:52:23 bw
				Я думаю что можно, а почему нет.
Мы все же тут создаем самый лучший язык программирования и компилятор в мире. Поэтому с такой позиции стоит рассмотреть все возможности и новые идеи, иначе получится тот же Pascal, может скрещенный с Python, C и/или другими языками.
..bw
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 11:04:04 alexs
				насколько я знаю - интеловская архитектура команд процессора не позволяет однозначной боратной интерпретации - всё дело в различной длинне команд, а также из-за того что данные для команд идут также в основном коде программы.
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 11:29:57 ev
				но в интерпритаторе то по идее возможно
хотя по сути это будет не обратный ход разбора инструкций, а выполнение новых (но противоположных уже выполненным)
если это средство использовать исключительно для отладки - то теоретически такое возможно
хотя думаю не просто 

 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 12:09:19 alexs
				да - для отладки нужно будет учитывать обратный ход времени 

т.е вместо "+" ставить "-" и т.д.
 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 12:15:55 Vadim
				Итак, что у нас, в результате, получится? Можно по клаве бить кулаками, всеё ладонью, головой. Неважно какие символы вводятся. Процессор сам составит из этого винигрета программу. 

 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 13:18:07 Bupyc
				Вопрос: а зачем это нужно?
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 13:51:35 alexs
				практический смысл - посмотреть - а что было в программе 5 шагов назад - идея в принципе инетересная - но трудная
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 16:28:38 shade
				alexs писал(а):практический смысл - посмотреть - а что было в программе 5 шагов назад - идея в принципе инетересная - но трудная
Может просто тогда записывать "трассу", и предоставить возможность откатиться назад.. Типа как отмена в редакторах. Можно на каждый шаг либо запоминать состояние процессора либо (набор регистров), либо запоминать только изменные регистры..
 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 17:18:59 alexs
				а если ты поставил бряк-поинт?
всю трассу исполнения программы писать несколько накладно - ты не находиш?
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 17:34:49 Sergei I. Gorelkin
				Если есть команда вида 'mov ebx, 1', то откуда брать предыдущее значение этого регистра?
А полная трасса, в общем-то, вполне реальна. Вон, valgrind по сути интерпретирует машинный код, для каждой инструкции вызывая свой обработчик. Емкости современных винтов тоже вполне адекватны задаче.
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 17:37:39 wavebvg
				Это нереально всё забекапить ))), но только так это мона реализовать
Реальнее провести анализ всего кода (что-то вроде компиляции наоборот) и выявить все возможные переходы, после этого пожно будет добиться какого-либо "сжатия бекапов"
Грубо говоря так:
Создаём поток для каждой команды (адреса перехода в нашем исходном коде, который при трассировке осуществляет переход), причём индексируем его (то бишь называем) в соответствии с тем куда перешёл а записываем адрес откуда. Если уже есть поток с таким именем, то просто дописываем в него ещё одно значение, как попал на данный адрес.
Параллельно, в файле отладки (или как его там не назови), записываем индекс потока, перехода в этом потоке и прочее, в результате получаем, что при желании можно будет откатиться назад (т.е. перейти на кусок кода, который был раньше, просто подменив адрес в переходе)
Но при этом надо ещё как-то реализовать откат введённых данных и изменение сотояний переменных, что будет довольно трудоёмко, т.к. циклы вообще никак на обработаешь...
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 20:28:04 Brainenjii
				Отладчики и так глючные ^_^
			 
			
		
			
				Re: Обратный ход
				
Добавлено: 
19.09.2008 20:59:03 unC0Rr
				Лучше запустить программу в виртуальной машине и сохранить её состояние... затем вернуться будет просто - запустить заново и контролировать количество исполненных инструкций... кажется, кто-то это уже реализовал, во всяком случае я о такой идее слышал