Добрый день. Подскажите пожалуйста как можно отладить длл, инжекнутую в чужое АП? Я использую SetWindowHookEx для глобального хука. Нужно отладить несколько функций прямо внутри целевого процесса. Всвязи с этим пытаюсь инжектнуть дебаггером длл в целевой процесс. Пытаюсь в VS 2008 Express (C++) поступить следующим образом: жму Debug->Attach to process, выбираю нужный процесс из списка и... судя по всему длл туда не подгружается! Ставлю несколько брейкпоинтов на дллмэйн + прописал туда мессаджбокс, итог — на брейкапоинтах не останавливается, месседжбокс не выскакивает. Processs explorer от Марка Русиновича не находит библиотеку в ОП. BOOL WINAPI DllMain () { MessageBoxA(NULL,"OK",NULL,0); ... } В чем может быть проблема и как мне все-таки заставить дебаггер ВС работать?
hdc как вы надоели. ДАвай сюда код! ты что привел нам дллмайн? даже тебе стало очевидно что инжекта не происходит. Значит ищи ошибку в коде инжекта. Просто проверяй какая функция возвращает ошибку GetLastError в зубы тебе. Тут телепатов нету.
Да дело не в коде! Возьмем к примеру проект состоящий из одного файла и одной функции: #include <Windows.h> BOOL APIENTRY DllMain (HINSTANCE hInstance, DWORD reason, LPVOID reserved) { MessageBoxA(NULL, "OK", NULL, 0); switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } По идее для отладки ее в АП другого процесса нужно: 1. Debug -> Attach to process 2. выбрать нужный процесс и нажать Аттач Должен появится месседж бокс "ОК", но ничего не появляется. Кроме того после указанных действий все брейкпоинты становятся неактивными. Пробовал релиз и дебаг - результат один. В чем может быть проблема? Я так пологаю какието настройки студии или не установлено чтото в винде (студия стоит на винХР немного порезанной). Помогите!!!
может я чегото не понимаю, но код инжекта тут вообще не при чем! В описанном выше случае (где в коде длл тока дллмэйн), инжектить длл должна сама студия, но этого не происходит, и я не понимаю почему...
да и к тому же сам код инжекта, который я использую рабочий на 100%. найти нужно причину почему студия не инжектит длл в указанный ей процесс!
видимо дело в символах (pdb, может их нужно куданить скопировать?) и настройках проекта, нужно чтото поменять и возможно аттач ту процесс заработает) Может ли влиять версия DbgHelp.dll в винде на это?
Attach to process не инжектит dll, которую собирает в студии, в отлаживаемый процесс, а только аттачит дебаггер. Для отладки напиши простейший тул, который заинжектит твою длл в указаный pid (например, используя CreaterRemoteThread). И перед или после аттача к целевому процессу инжекти длл при помощи этой проги. Все брейкпоинты будут работать.
Теперь понятно. Attach цепляет только отладчик. То что ты собирал до данного момента в Студии в этом процессе не участвует.