Mental_Mirror Объясню 1) Эмуляция CPU 2) Эмуляция устройств 1) вот пример mov eax,ebx - должны сохранить бывший eax , а обрано это будет mov eax,[old eax] stosd - должны сохранть ячейку памяти и.т.д т.о. по иструкции кода исходного можно создать код обратный исходному, но со значительными запросами на память 2) пример запись сектора - должны сохранить предидущий сектор вывод звука - обычно через буфер - нужно сохранить перевернутыый буфер вывод сетевого пакета - только через виртуальный адаптер все сохранять в буфер и т.д.
никто же не накладывал ограничения на код? как решится тогда по вашему такая проблема: (код взят из головы) mov eax,X (количество адресов в jmp_table] call random (случайно от 0 до X-1) jmp [offset jmp_table+eax*4] jmp_table dd offset @1 dd offset @2 dd offset @3 ... это из того что мне не понятно =] а так, имхо "обратная трассировка" может быть решена так: сначало трейсим код увеличивая eip (стандартно) и собираем детальный лог работы, а потом основываясь на этом логе эмулируем "обратное выполнение"...
+1, а смысл? Неужто это очень необходимо с практической точки зрения? Как уже сказали, снятие контекста на каждом этапе - более чем достаточно чтобы понять что было в большинстве случаев. Обычно из обратных действий нужно лишь проследить, что было в вызывающей функции до момента вызова текущей (в реверсинге например, найти места сравнения чеголибо и условные джампы). Для этого ничего вообще экстраординарного делать не нужно.
Народ а как заставить работать простенькую программу.Которая фактически нихрена не делает полезного. Вообще без регистра eip? Такое возможно?
a9d Как это без регистра EIP? В другой архитектуре? Регистр EIP используется неявно в программе. Или может нужна эмуляция? Думаю да. Ну тогда надо эмулировать ручками каждую команду, разбирая операнды и логику работы конкретных команд. Тут было несколько тем по этому поводу.
А иллюзию того что он не работает или показывает какойнить бред в отладчике (TurboDebuger) какнить попростому можно сделать ?