Я не знал, как назвать тему. Хотелось бы вот что реализовать. Если игра, при помощи Spy++ я узнаю, что идет мессага WM_CHAR 'A', где мне ставить бп, чтобы попасть на функцию, следующую за мессагой. Спасибо.
Получаешь адрес WNDPROC (GetWindowLong, GWL_WNDPROC), устанавливаешь на свою функцию (SetWindowLong, GWL_WNDPROC) где вызываешь оригинал. Когда идет месага WM_CHAR 'A' в своей функции ставишь бп и обрабатываешь как надо, а оттуда уже можешь попасть на функцию. возможно я тебя не правильно понял.
Наверное просто тебя смутило слово "Перехват" в заголовке, мне нужно просто знать зде мне искать WM_CHAR что-бы я мог просто тупо на неё сделать бп, затем поидее я должен попасть в код функции(в игре), которая следует после WM_CHAR... Вот и всё, просто не представляю где находится WM_CHAR.
newb речь идет об отладчике? очевидно да, или я не понял насчет бп. Находишь оконную процедуру. Иногда это затруднительно, но все-таки вполне реально. Где-то в начале будет неизбежная гребенка сравнений. Находишь ветку с WM_CHAR - ставишь туда бп. Некоторые отладчики позволяют ставить бп на вход в оконную процедуру с условием (wparam=WM_CHAR). Тогда гребенку сравнений можно и не искать. Где находится WM_CHAR? В переменной, передаваемой параметром функции. Это не имя функции. WM - означает window message, или что-то в этом духе. На самом деле, эта некоторая константа, для которой исключительно из соображений удобства придумали буквенное обозначение.
Так ты знаешь адрес откуда она вызывается? Если нет - ставь бряк на MessageBox и когда появится нужны - трассируй др ret/retn или посмотри адрес возврата в стеке. Или я тебя не понял..
а что такое "гребенка" - это характерный участок кода типа ... cmp eax, 0 jz Case_zero cmp eax, 1 jz Case_one ... Выглядит как расческа )) и в виде машинных команд, и в виде мнемоник. При большом количестве обрабатываемых вариантов может меняться на обращения к таблицам или вычисление перехода по некоторым правилам, но суть остается та же - на яву это (как правило) Select case.