Всем привет. Читаю рихтера, разбираюсь с внедрением длл. Написал приложение Окно. Написал dll, которая получает хэндл этого окна, изменяет его положение и размеры, и заменяет процедуру обработки окна на свою. Вот код dll Код (Text): WndProc PROC hwnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .if uMsg==WM_MOVE Invoke MessageBox,0,offset szOk,offset szOk,MB_OK .endif Invoke CallWindowProc,lpfnWndProcOld,hwnd,uMsg,wParam,lParam ret WndProc1 ENDP DoJob PROC Invoke FindWindow,offset szClsName,NULL mov myhwnd,eax Invoke MoveWindow,myhwnd,10,10,40,30,TRUE Invoke SetWindowLong,myhwnd,GWL_WNDPROC,offset WndProc mov lpfnWndProcOld,eax ret DoJob ENDP Написал exe, который внедряет эту длл в процесс окна. Написал правильно, потому что окно меняет положение и размер. Но как только, с окном происходит какое-нибудь событие, то сразу процесс окна совершает недопустимую операцию и закрывается. В чем может быть дело? Проц АМД Тюрон 64, 2 процессора. Windows vista, но я пишу как под 32битный.
Да, ибо передвигается оно после вот этих строк: Код (Text): Invoke GetProcAddress,hLibModule,offset szFuncName mov lpDll,eax Invoke VirtualAllocEx,hProcess,NULL,20,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE mov lpMem,eax Invoke WriteProcessMemory,hProcess,lpMem,offset szMyDll,11,offset lpHz Invoke CreateRemoteThread,hProcess,NULL,0,lpDll,lpMem,0,NULL А передвижение окна, и замена его WndProc'есса, происходит в одной процедуре в dll. Код которой я уже показывал.
У меня ничего не получается Попробовал запустить тоже самое, на ХР пень 3, результат одинаковый. Окно переезжает, и при каком либо действии с ним, закрывается с ошибкой.
Народ, помогите плиз Я просто в панике! Выкладываю все, исходники, бинарники. Запуск таков: Запускаете window.exe, открывается окно. Запускаете prog.exe, Появляется MessBoxage с текстом window.exe, это значит, что процесс найден. После чего, идет загрузка библиотеки mydll.dll в window.exe. Потом, появится еще 1 MessageBox со словом Test, это значит, что dll загрузилась в процесс window, и начала выполняться, Ну это она и вызвала это окно Test. После чего окно должно переместиться в левый верх, стать немного прозрачным и заменить свой обработчик процесса! Все происходит нормально, но потом, при наведении мышки на окно, оно закрывается с ошибкой! Помогите кто нибудь! Плииз!
Нет не забыл Кстати если научите этим пользоваться, будет круто. На счет моей програмки: Я супер ступил, и просрал из-за этого полтора дня Я в Dll в том месте, где она запускает этот DoJob, не поставил ret... Так обидно, аж плакать хочется
Ааааа, народ, ну помогите мне, умоляю!!! Я просто в шоке, я поменял имя точки входа в длл на DLLENTRY@12 и сделал выход из dll - ret 12, и все заработало, потом я стер Invoke MessageBox в одном месте, и все опять перестало работать (( Посмотрите мой код, что в нем не так!! Очень прошу! Прикреплен чуть выше, я уже 2 дня страдаю (
DllEntry нет, лоадер виснет, если не находит процесс... всё не так. прилагаю переработанный рабочий код. изучай его.
Круто, я вроде понял, только скажите еще, где прочитать про эту точку входа? Ну про параметры, которые ей передаются, и про то, в какие моменты она вызывается?
Просто. Ставишь где нить в коде своей длл CCh и ловишь в айсе, где выпрыгнет, дальше трэйсишь. Это один из многих вариантов