|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.06.2011, 20:07 | #1 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Подмена WndProc. Слетает прога.
Пытаюсь подменить функцию обработки сообщений... Нахожу окно (wnd), сохраняю адрес текущей функции (pnt), изменяю указатель на свой
Код:
Код:
|
16.06.2011, 20:08 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вы подменяете в чужом процессе то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.06.2011, 20:21 | #3 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Да. Уже даже на блокноте тестил. Думал защита =)
|
16.06.2011, 20:34 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
как вы думаете как код из вашего процесса попадет в чужой?
надо загружать в тот процесс DLL/код и уже на эти адреса переносить. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.06.2011, 20:35 | #5 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Это отрывок из локального хука. DLL подгружается - всё норм.
|
16.06.2011, 20:45 | #6 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Вот собственно скрин и файл хука. После того как я переключаюсь на окно блокнота, он зависает.
ХУк: Код:
|
16.06.2011, 21:02 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
соглашение вызова какое должно быть у оконной процедуры?)
stdcall то забыли Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.06.2011, 21:08 | #8 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Ещё в начале пробовал... Убрал потому что на msdn (или где-то ещё читал) было написано без stdcall.
С stdcall блокнот не зависает, а вылетает с ошибкой=\ UPD: Брр.. Уже всё перечитал. Нигде подробно не написано, да и примеров не нашёл. Зато гугл уже проиндексировал эту страницу :D UPD2: Читал, читал. Нашёл слово "глобальный"... Передал для глобального хука. Та же ошибка.. UPD3: Может у кого есть пример? Завтра наверно буду под C++ переписывать =\ Последний раз редактировалось TwiX; 16.06.2011 в 22:39. |
16.06.2011, 23:07 | #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. |
16.06.2011, 23:11 | #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 |