Re: Re:самомодифицирующийся код?
- From
- Vladimir Ivanov ()
- To
- Vasily Nikishaev
- Date
- 2002-10-07T19:04:14Z
- Area
- SU.WINDOWS.NT.PROG
From: "Vladimir Ivanov" <vivanov@tmsoft-ltd.kiev.ua>
> AV> Есть гораздо более прямой путь, причем от самой Microsoft. Detours
> AV> называется.
> Я посмотрел этот Detours. Он работает по принципу замещения
> первых
> пяти байт API-функций на код безусловного перехода на свой обработчик.
> У этого способа есть недостаток, описанный мною ранее (вероятность
> прерывания потока в момент замены первых пяти байт функции).
Расскажу свой способ, сводящий вероятность к нулю:
1. Поднимаем приоритет потока (достаточно, чтобы он был выше по приоритету
других потоков процесса)
2. Вызываем Sleep(1). В момент возврата из сна будем находится в начале
кванта времени
3. Выполняем замену пяти байт, вызываем FlushInstructionCache()
4. Восстанавливаем приоритет потока
>Вторым недостатком является необходимость указания количества параметров
> для каждой перехватываемой функции.
Тем не менее для перехвата конкретных, заранее известных функций - этого
достаточно.
Однако не так уж сложно расширить функциональность библиотеки - на благо
исходники доступны.
>Третьим недостатком является
> достаточно
> большой объем занимаемой памяти и значительное время загрузки
> библиотеки,
> содержащей обработчики перехватываемых функций (это в том случае, когда
> перехватывается очень много функций).
Ты имел в в виду очень много функций и в большом количестве процессов ?
Тогда согласен.
Но опять же недостаток легко устраняем.
На фоне недостатков, нельзя не сказать и о главном преимуществе Detours - он
позволяет _безопасно_ вызвать оригинальную функцию. Detours содержит
простейший дизассемблер, который "интеллетуально" формирует
trampoline-функцию, копированием части оригинальной функции с установкой
перехода на оставшую часть кода.
Т.е. я хотел сказать, что перечисленные недостатки (кроме первого) есть
относительно легко исправляемыми недостатками конкретной реализации, а не
способа.
С уважением, Владимир
--- ifmail v.2.15dev5
* Origin: A poorly-installed InterNetNews site (2:5020/400)