![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
Пытаюсь подменить функцию обработки сообщений... Нахожу окно (wnd), сохраняю адрес текущей функции (pnt), изменяю указатель на свой
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
вы подменяете в чужом процессе то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
Да. Уже даже на блокноте тестил. Думал защита =)
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
как вы думаете как код из вашего процесса попадет в чужой?
надо загружать в тот процесс DLL/код и уже на эти адреса переносить. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
Это отрывок из локального хука. DLL подгружается - всё норм.
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
Вот собственно скрин и файл хука. После того как я переключаюсь на окно блокнота, он зависает.
![]() ХУк: Код:
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
соглашение вызова какое должно быть у оконной процедуры?)
stdcall то забыли Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
Ещё в начале пробовал... Убрал потому что на msdn (или где-то ещё читал) было написано без stdcall.
С stdcall блокнот не зависает, а вылетает с ошибкой=\ UPD: Брр.. Уже всё перечитал. Нигде подробно не написано, да и примеров не нашёл. Зато гугл уже проиндексировал эту страницу :D UPD2: Читал, читал. Нашёл слово "глобальный"... Передал для глобального хука. Та же ошибка.. UPD3: Может у кого есть пример? Завтра наверно буду под C++ переписывать =\ Последний раз редактировалось TwiX; 16.06.2011 в 22:39. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 14.03.2011
Сообщений: 104
|
![]()
Из за пересечения имен функций, прога уходит в рекурсию. Пишите Windows.CallWindowProc или переименуйте свою процедуру окна.
С++ по умолчанию использует способ передачи параметров STDCALL - через стек. Делфи - свой способ - через регистры. Первую процедуру окна вызывает винда. Поэтому stdcall нужен. В процедуру окна передается 4 параметра, все целого 4-байтного типа (longint, dword и их производные) В pnt вы сохраняете, если я правильно понял, последнюю подмененную процедуру окна, а в собственной процедуре окна вы ее вызываете. Вместо этого берите адрес процедуры окна с массива procs. Массив procs на 16 элементов, в блокноте может быть намного больше 16 окон. Последний раз редактировалось Silver_S; 16.06.2011 в 23:12. |
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
WinAPI использует это соглашение о вызове, но не С++. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
H2269 Overriding virtual method 'TForm1.WndProc' has lower visibility (private) than base class 'TForm' | AlexanderSatorin | Общие вопросы Delphi | 2 | 27.06.2010 10:08 |
Слетает ОС | Медсестра | Операционные системы общие вопросы | 13 | 16.05.2010 01:51 |
Слетает верстка... | lastalert | HTML и CSS | 6 | 02.05.2010 17:14 |
Смена WndProc в рантайме | VVVadim | Win Api | 1 | 28.04.2009 18:16 |