Обратный ход
Модератор: Модераторы
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
Обратный ход
В качестве эксперимента.
Что вы думаете о существовании такой инстукции (оператора/директивы/функции) или группы инструкций, котороые бы позволяли изменить стандартную (с младших адресов в сторону старших) трассировку (выполнение) инструкций на обратную, т.е. процессор, получив такой пинок, пошол бы разбирать инструкции в обратном направлении?
Пока не представляю как это можно использовать, но идея забавная :-).
p.s. Поясню. В реальных условиях под инструкциями можно (нужно?) понимать операторы языка и прочее, чем последний оперирует.
..bw
Что вы думаете о существовании такой инстукции (оператора/директивы/функции) или группы инструкций, котороые бы позволяли изменить стандартную (с младших адресов в сторону старших) трассировку (выполнение) инструкций на обратную, т.е. процессор, получив такой пинок, пошол бы разбирать инструкции в обратном направлении?
Пока не представляю как это можно использовать, но идея забавная :-).
p.s. Поясню. В реальных условиях под инструкциями можно (нужно?) понимать операторы языка и прочее, чем последний оперирует.
..bw
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
Я думаю что можно, а почему нет.
Мы все же тут создаем самый лучший язык программирования и компилятор в мире. Поэтому с такой позиции стоит рассмотреть все возможности и новые идеи, иначе получится тот же Pascal, может скрещенный с Python, C и/или другими языками.
..bw
Мы все же тут создаем самый лучший язык программирования и компилятор в мире. Поэтому с такой позиции стоит рассмотреть все возможности и новые идеи, иначе получится тот же Pascal, может скрещенный с Python, C и/или другими языками.
..bw
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
насколько я знаю - интеловская архитектура команд процессора не позволяет однозначной боратной интерпретации - всё дело в различной длинне команд, а также из-за того что данные для команд идут также в основном коде программы.
но в интерпритаторе то по идее возможно
хотя по сути это будет не обратный ход разбора инструкций, а выполнение новых (но противоположных уже выполненным)
если это средство использовать исключительно для отладки - то теоретически такое возможно
хотя думаю не просто
хотя по сути это будет не обратный ход разбора инструкций, а выполнение новых (но противоположных уже выполненным)
если это средство использовать исключительно для отладки - то теоретически такое возможно
хотя думаю не просто
Итак, что у нас, в результате, получится? Можно по клаве бить кулаками, всеё ладонью, головой. Неважно какие символы вводятся. Процессор сам составит из этого винигрета программу. 
Вопрос: а зачем это нужно?
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
alexs писал(а):практический смысл - посмотреть - а что было в программе 5 шагов назад - идея в принципе инетересная - но трудная
Может просто тогда записывать "трассу", и предоставить возможность откатиться назад.. Типа как отмена в редакторах. Можно на каждый шаг либо запоминать состояние процессора либо (набор регистров), либо запоминать только изменные регистры..
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Если есть команда вида 'mov ebx, 1', то откуда брать предыдущее значение этого регистра?
А полная трасса, в общем-то, вполне реальна. Вон, valgrind по сути интерпретирует машинный код, для каждой инструкции вызывая свой обработчик. Емкости современных винтов тоже вполне адекватны задаче.
А полная трасса, в общем-то, вполне реальна. Вон, valgrind по сути интерпретирует машинный код, для каждой инструкции вызывая свой обработчик. Емкости современных винтов тоже вполне адекватны задаче.
Это нереально всё забекапить ))), но только так это мона реализовать
Реальнее провести анализ всего кода (что-то вроде компиляции наоборот) и выявить все возможные переходы, после этого пожно будет добиться какого-либо "сжатия бекапов"
Грубо говоря так:
Создаём поток для каждой команды (адреса перехода в нашем исходном коде, который при трассировке осуществляет переход), причём индексируем его (то бишь называем) в соответствии с тем куда перешёл а записываем адрес откуда. Если уже есть поток с таким именем, то просто дописываем в него ещё одно значение, как попал на данный адрес.
Параллельно, в файле отладки (или как его там не назови), записываем индекс потока, перехода в этом потоке и прочее, в результате получаем, что при желании можно будет откатиться назад (т.е. перейти на кусок кода, который был раньше, просто подменив адрес в переходе)
Но при этом надо ещё как-то реализовать откат введённых данных и изменение сотояний переменных, что будет довольно трудоёмко, т.к. циклы вообще никак на обработаешь...
Реальнее провести анализ всего кода (что-то вроде компиляции наоборот) и выявить все возможные переходы, после этого пожно будет добиться какого-либо "сжатия бекапов"
Грубо говоря так:
Создаём поток для каждой команды (адреса перехода в нашем исходном коде, который при трассировке осуществляет переход), причём индексируем его (то бишь называем) в соответствии с тем куда перешёл а записываем адрес откуда. Если уже есть поток с таким именем, то просто дописываем в него ещё одно значение, как попал на данный адрес.
Параллельно, в файле отладки (или как его там не назови), записываем индекс потока, перехода в этом потоке и прочее, в результате получаем, что при желании можно будет откатиться назад (т.е. перейти на кусок кода, который был раньше, просто подменив адрес в переходе)
Но при этом надо ещё как-то реализовать откат введённых данных и изменение сотояний переменных, что будет довольно трудоёмко, т.к. циклы вообще никак на обработаешь...
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Отладчики и так глючные ^_^
Лучше запустить программу в виртуальной машине и сохранить её состояние... затем вернуться будет просто - запустить заново и контролировать количество исполненных инструкций... кажется, кто-то это уже реализовал, во всяком случае я о такой идее слышал
