![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 21
|
![]()
Всем доброго времени суток.
Собственно вот такая ДЛЛка имеется: Код:
HookCode, UnHookCode и HookProcedure: Код:
НО! Почему она не после отработки процедуры хука управление не отдается оригиналу DrawTextW? Может я чего-то не то с адресами намудрил? Хотя из анализа кучи статей на тему сплайсинга и перехвата вообще, получается что считаю я все верно. Практически все статьи, кроме этой: http://www.wasm.ru/article.php?article=apihook_2 дублируют друг-друга в той или иной степени ![]() В общем нужна помощь ![]() Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
![]()
Выкладывай бинарники exe и dll посмотрим что там не так
Нет, ну правда..
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 21
|
![]()
Вечером выложу, пока нет возможности.
Код здесь не такой большой, из его анализа все нормально что-ли? ![]() Да, и еще, в перспективе лучше будет ДЛЛку только в один процесс(Или пару ![]() Пока не получилось.. но и пробовал не много, правда ![]() Если у кого-то есть примеры, буду признателен. P.S. Знаю, что примеров много, но пока что-то не вышло ![]() И основа - это все-таки возврат управления перехватываемой функции. |
![]() |
![]() |
![]() |
#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 |