5 байт самомодификации

From
Gennady Mayko ()
To
Andrey Kochin
Date
2002-10-22T10:04:34Z
Area
SU.WINDOWS.NT.PROG
From: "Gennady Mayko" <gennady.mayko@broadcom.com>

Добрый день!

 AK> Пpивет, All !

 AK>  Занятный был тред. Одноко, меня интересует, почему так односторонне
 AK> рассматривались вероятные проблемы.

 AK>  Мне представляется, например, вариант со следующими допущениями:

 AK> 1. 5 байт, которые мы модифицируем первоначально содержали более одной
 AK> атомарной инструкции;
--
Здесь нет особых проблем. Если в начале перехватываемой функции есть несколько
команды, занимающие более 5 байт и первая команда занимает менее 5, то тогда
нужно скопировать все эти команды в свой буфер; в конце буфера вставить
команду JMP на следующую команду перехватываемой функции; и уже атомарно
вставить в начало оригинальной функции команду JMP на наш буфер.
Проблемы могут быть, если длина перехватываемой функции меньше 5 байт. Здесь,
конечно, нужно действовать по другому.


 AK> 2. на момент модификации существует поток, приостановленный после
 AK> выполнения непоследней из этих инструкций.
--
И это можно обойти несколькими способами. Наиболее простой -
"административный" - требовать, чтобы никакие другие потоки в этот момент не
выполнялись. Если так не получается, тогда написать "мини-отладчик", который
будет запускаться перед модифицируемой программой (это легко сделать
установками в registry); сделает необходимые изменения и запустит программу на
выполнение.

 AK> Другими словами, проблемы есть не только когда нас прерывают, но и когда
 AK> мы прерываем.

 AK> BTW. Вспомнилась песня о теории верояностей:
 AK>  Мы прерываем, нас прерывают...
 AK>  Как это часто несовпадает?        ;)

 AK> Пока!
 AK> Andrey

--
С уважением,
Геннадий Майко

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)