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)