Страница: 1 | 2 | 3 |
Вопрос: Нужна помощь с хуком
Добавлено: 25.11.08 15:46
Автор вопроса: Lapex
Ответы
Всего ответов: 42
Номер ответа: 31
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #31
Добавлено: 30.11.08 21:22
По поводу кода из ollydbg - я допустил оплошность Вот реальный код:
Номер ответа: 32
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #32
Добавлено: 30.11.08 21:57
код должен быть вида mov eax, [reg]
mov ecx, [addr]
вобщем любая команда, которая читает операнд из памяти. этот код не может дать ошибки доступа к памяти при чтении, ибо чтения тут нету хотя, если учесть, что данные берутся со стека, то возможен вариант порчи регистра esp. может как то связано с переполнением буфера какого нить. хз. тут нада все таки гораздо внимательнее смотреть выполнение в олли.
Номер ответа: 33
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #33
Добавлено: 30.11.08 21:58
покажи содержимое регистра esp, для полноты картины.
Номер ответа: 34
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #34
Добавлено: 30.11.08 23:15
Я с ollydbg не работал, поэтому не уверен, что это оно:
Номер ответа: 35
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #35
Добавлено: 01.12.08 07:05
Ясна. стек в норме, есп тож в норме. Такая бага бывает в программах, написанных на плюсах, когда ты плохо работаешь с памятью - пишешь больше, чем выделил. Тем самым запарываешь сосдений блок в heap'e. Нада плясать в сторону детальной проверки записи данных. Или ты где то портишь память, или хз. Больше ничего с этих данных не выжать, экспериментируй
Номер ответа: 36
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #36
Добавлено: 01.12.08 10:37
А я подумал, что причина в этом.
Да, похоже на то, а разработчики приложения футболят и говорят, что плагины нужно писать только на Си и притензии принимают только от лиц официально купивших их продукт (это их право), но к сожалению я не отношусь к таким лицам.
На форуме разработчиков приложения, изредка проскакивают жалобы на похожую ошибку в плагинах, написанных как на Си так и на PB, но разработчики отмахиваются, мол эта ваша ошибка.
Проверял на плагине "пустышке".
Большое спасибо за уделенное внимание - буду эксперементировать.
Номер ответа: 37
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #37
Добавлено: 01.12.08 17:23
хм. вот одна из возможных причин
тема в чем - strlen возвращает длину строки, не считая завершающий ноль. а вот strcpy копирует с завершающим нулем. это главная ошибка начинающего си кодера. именно на такой код при завершении работы программы я тоже получал в начале изучения плюсов ошибку, ибо система чистит память кучи процесса при завершении, и все косяки с работой выясняются только в конце.
Номер ответа: 38
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #38
Добавлено: 01.12.08 18:46
Размер буфера изначально равен 100, а длина строки - гораздо меньше (8 байт). Следовательно исходя из услоаия я не меняю размер буфера и строка должна поместиться в буфере.
Пробовал добавить в свой код альтернативу memset:
На ошибку нм как не повлияло.
Номер ответа: 39
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #39
Добавлено: 01.12.08 21:09
Вообщем удалось избавиться от ошибки поместив удаление Subclassing'а в сообщение %WM_CLOSE вместо %WM_DESTROY:
Но это не хорошо, т.к. в приложении по сообщению %WM_CLOSE может быть вызвано диалоговое окно с вопросом о закрытии приложения и в случае отказа от закрытия я остаюсь без Subclassing'а.
Есть идеи?
Номер ответа: 40
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #40
Добавлено: 01.12.08 21:47
Когда ты вызовешь CallWindowProc, то тебе вернется ответ от программы, решила она закрыть окно или нет.
Тут иф впаиваешь. Вот что пишет мсдн
Return Value
If an application processes this message, it should return zero.
Сталобыть если пришел 0 - закрывать окно отказались. Хотя с учетом всех чудес, возможно и тут всплывут магические подводные камни, юзер брейкпойнты, полузакрытые окна и прочие полтергейсты =\
Номер ответа: 41
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #41
Добавлено: 01.12.08 22:56
Чесно говоря не очень соображу с условием Если можно на примере.
Номер ответа: 42
Автор ответа:
Lapex
Вопросов: 6
Ответов: 56
Профиль | | #42
Добавлено: 02.12.08 08:57
Вообщем вернулся к SetWindowsHookEx с WH_CBT - ситуация нормализовалась!