|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.02.2012, 00:22 | #1 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 21
|
Перехват DrawText, проблема с возвратом управления оригиналу.
Всем доброго времени суток.
Собственно вот такая ДЛЛка имеется: Код:
HookCode, UnHookCode и HookProcedure: Код:
НО! Почему она не после отработки процедуры хука управление не отдается оригиналу DrawTextW? Может я чего-то не то с адресами намудрил? Хотя из анализа кучи статей на тему сплайсинга и перехвата вообще, получается что считаю я все верно. Практически все статьи, кроме этой: http://www.wasm.ru/article.php?article=apihook_2 дублируют друг-друга в той или иной степени В общем нужна помощь Заранее спасибо. |
17.02.2012, 01:16 | #2 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Выкладывай бинарники exe и dll посмотрим что там не так
Нет, ну правда..
|
17.02.2012, 14:53 | #3 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 21
|
Вечером выложу, пока нет возможности.
Код здесь не такой большой, из его анализа все нормально что-ли? Да, и еще, в перспективе лучше будет ДЛЛку только в один процесс(Или пару ). Пока не получилось.. но и пробовал не много, правда Если у кого-то есть примеры, буду признателен. P.S. Знаю, что примеров много, но пока что-то не вышло И основа - это все-таки возврат управления перехватываемой функции. |
17.02.2012, 22:11 | #4 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Да там непонятно ничего откуда управление должно возвращаться даже
мне например совсем не очевидно где находится @NewSystemFunction и прочее ну если принять, что системная функция сплайсится сюда @newDrawTextW то там какие то вообще непонятные махинации. это насколько я понимаю сплайс снимается и сразу опять ставится зачем то UnHookCodeHook(@SystemFunctionBridg e); SetCodeHook(SystemFunctionBridge.Ad dress,@NewDrawTextW,@SystemFunction Bridge); в конце управление в этой функции перехватчике управление ret'ом, с выталкиванием всех аргументов оригинальной функции передается вызывающему её коду. то есть просто минуя саму оригинальную функцию происходит выход из перехватчика в код, который вызывал DrawTextW. По делу (в многопоточных приложениях так разумеется не делается без остановки потоков или же переписывания первых байт функции затертых переходом на перехватчик) как то так надо: тут в начале код полезной нагрузки UnHookCodeHook(@SystemFunctionBridg e); тут снятие сплайсинга с функции DrawTextW(DC: HDC; Str: PChar; Count: Integer; var Rect: TRect; Format:Uint) тут вызов оригинальной функции с ее параметрами SetCodeHook(SystemFunctionBridge.Ad dress,@NewDrawTextW,@SystemFunction Bridge); установка сплайсинга обратно
Нет, ну правда..
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Функция DrawText() | БалаШагаЛ | Win Api | 2 | 13.10.2011 20:06 |
Проблема с возвратом fstream | Farrel | Общие вопросы C/C++ | 11 | 09.03.2011 19:03 |
Проблема с выбором нужного элемента управления. | kushnarenkoa | Помощь студентам | 1 | 17.12.2010 19:14 |
проблема использования элементов управления в word | sirius_ltd | Microsoft Office Word | 2 | 30.09.2010 17:51 |
TextOut и DrawText | Claster | Помощь студентам | 3 | 29.03.2010 18:59 |