|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 18, 2003 17:15:03 Здраствуйте - снова я ... :| вот ставлю точку прерывания на сообщение, типа bmsg xxxx wm_lbuttonup и попадаю в какой-то kernel.alloc ... отлично - сообщение отлавливается с момента своего зарождения ..., но мне надо сразу попасть в код моей прошки. Жму до посинения F10 (на первый раз терпения хватает) ... наконец-то блин - вот она, родная. Фиксирую CS моей проги и пишу типа, bmsg xxxx wm_lbuttonup if cs == xxxx - да..к теперь вообще не работает ... Подскажите пожалуйста, как тут сразу попасть в код программы минуя всякие user и kernel, а то жать до утра F10 - типа смысл всего как-то теряется ... ! И еще. Хочу глюканом поделится. У меня 98 винда, пишу такую последовательность: bmsg xxxx бэ бэ бэ bpio xxx, жму Crtl-D, выхожу в винду - синий экран (!!!) - МЕРТВО ... гы гы гы ... |
|
|
Дата: Янв 20, 2003 16:34:53 Загрузи в SoftIce таблицу символов своей программы, и не мучайся! |
|
|
Дата: Янв 20, 2003 21:50:17 Хм..м, это ты имееш ввиду просто компильнуть мою прогу с отладочной информацией, а потом поставить bpx на TForm1.Button1Click, т.е. SoftICE будет шарить, где что ... ?! Или как ... ? Хотя вроде понятно ... Ну, а если программа чужая ?!. Отладочной инфы нету, понятное дело ... Как здесь сразу попасть в обработчик события в проге ? - о чем я и хотел сразу спросить ... .| |
|
|
Дата: Янв 21, 2003 11:11:58 · Поправил: Four-F Жму до посинения F10 Жми F12 - будешь выходить сразу из процедуры на один уровень вверх. =============================================== К сожалению тупо не объяснить - много вариантов. Пишу по памяти и по старым черновикам - статью когда-то хотел писать. Так что могут быть несовпадения - решишь медитативным путем ;-) :hwnd xxx Window Handle hQueue SZ QOwner Class Name Window Procedure xxx(2) 120F 32 WINHLP32 MS_WINTOPIC ssss:aaaaaaaa xxx - хендл интересующего тебя окна. Window Procedure говорит само за себя. Делаешь u aaaaaaaa В первой или второй команде будет адрес. Это и есть адрес оконной процедуры. Работает это не всегда, особенно если это стандартная процедура контрола и т.п. ===================================================================== Есть другой, практически универсальный способ - Найти место гда формируется сообщение. Ставишь бряк: bpx K32Thk1632Epilog do "p ret" p ret - выход из процедуры. Будешь вываливаться попеременно в одном из этих мест: 0187:BFF94213 E8CDD5FDFF CALL KERNEL32!K32Thk1632Prolog 0187:BFF94218 E8A086FEFF CALL KERNEL32!WaitForSingleObject 0187:BFF9421D E8E8D5FDFF CALL KERNEL32!K32Thk1632Epilog Тя интересует зто: 0187:BFF943FD E8E3D3FDFF CALL KERNEL32!K32Thk1632Prolog 0187:BFF94402 E8F6F1FDFF CALL BFF735FD ; <- bpx сюда 0187:BFF94407 E8FED3FDFF CALL KERNEL32!K32Thk1632Epilog Процедура BFF735FD как раз и формирует мессагу окну. Это бутылочное горло. Если правильно расставишь условные бряки, то можна черта в ступе отловить. 0187:BFF735FD PUSH EBP 0187:BFF735FE MOV EBP,ESP 0187:BFF73600 PUSH ESI 0187:BFF73601 PUSH EDI 0187:BFF73602 MOV GS,[EBP+0A] 0187:BFF73606 MOVZX ESI,WORD PTR [EBP+08] 0187:BFF7360A MOV ECX,GS:[ESI] 0187:BFF7360D AND ECX,7FFFFFFF 0187:BFF73613 JZ BFF7362D 0187:BFF73615 MOV EAX,[EBP+10] 0187:BFF73618 TEST EAX,EAX 0187:BFF7361A JNZ BFF7365F ; забивка в стек параметров сообщения 0187:BFF7361C LEA EDX,[ESI+0C] 0187:BFF7361F SHR DWORD PTR GS:[ESI+04],1 0187:BFF73623 JB BFF73647 0187:BFF73625 PUSH DWORD PTR GS:[EDX] ; PUSH lParam, wParam, uMsg, hWnd 0187:BFF73628 LEA EDX,[EDX+04] 0187:BFF7362B LOOP BFF7361F 0187:BFF7362D MOV EDI,ESP 0187:BFF7362F XOR EAX,EAX 0187:BFF73631 CMP GS:[ESI+08],EAX 0187:BFF73635 JZ BFF7363B ; вызов оконной процедуры 0187:BFF73637 CALL GS:[ESI+08] ; CALL WndProc 0187:BFF7363B MOV ESP,EDI 0187:BFF7363D XOR ECX,ECX 0187:BFF7363F MOV GS,CX 0187:BFF73641 POP EDI 0187:BFF73642 POP ESI 0187:BFF73643 LEAVE Например наблюдать все сообщения всем окнам можно набрав в SoftICE следующие команды (BFF73637 для моей 98SE): watch * esp watch *(esp+4) watch *(esp+8) watch *(esp+c) watch gs:esi+8 bpx BFF73637 do "d gs:esi+8; u *dataaddr" |
|
|
Дата: Янв 21, 2003 19:21:36 ... ого - загрузил ... ~|:-) ... Сейчас, сошкребу страничку за полчасика, да пойду медитировать ... ;) |
|
|
Дата: Янв 21, 2003 20:37:21 Удачи ;-) |
|
|
Дата: Янв 23, 2003 18:47:31 Таки да :) ..., все так и есть ... спасибо !!! |
|
|
Дата: Окт 17, 2003 17:09:35 А что такое KERNEL32!K32Thk1632Prolog ? Я правильно понял, что это возможность BP на Entry Point? Кстати, как можно BP на Entry Point без таблицы символов? |
|
|
Дата: Окт 17, 2003 21:47:16 Янв 23, 2003 18:47:31 - ууёёё... когда же это было :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069 |