Не могу отловить исключение в длл подгружаемой к стороннему процессу. Отладчик вызывается на иключение, а не на брикпойнт.
Пипец... Я хочу отладить процесс. Ставлю в исходнике прерывание int3 в первой процедуре после DLL_PROCESS_ATTACH. На этом месте выполнения кода, по идее, должен запуститься OllyDbg для отладки, но он запускается не на брикпойнте, а на исключении, которое происходит дальше, поскакивая int3. Длл подгружается к другому запущенному процессу (для отладки - это notepad.exe) через CreateRemoteThread. Что еще...А! Виндовс ХР.
Короче, не важно какой код - любой. Ставлю int3 в исходнике длл в процедуре обработки DLL_PROCESS_ATTACH, в приложении возникает ошибка инициализации если библиотека связана статически и просто исключение, если ее подгружать. Какой-то баг, который мне мешает отладить мою длл. OllyDbg стоит обработчиком исключний по умолчанию.
тоесть я так понял ты пишешь в исходник длл после длл процесс аттач int3 чтобы прога загрузилась в отладчик Кароче на таких "багах" основана часть одной весьма распространённой защиты какой-говорить не буду А теперь смотри главный прикол При попытке подгрузить олли прогу с длл в которой есть DLL_PROCESS_ATTACH прога не подрывается на главной One-Shot бряке, а сразу начинает выполнение с DLL_PROCESS_ATTACH тоесть сначала выполняется код dll, а потом exe Например моя антиотладочная фишка Самая что ни на есть простая демонстрирую попробуй прогу запустить без отладчика и с отладчиком
Ну так именно там я и ставлю int3, но отладчик не подгружается. Какой баг ты имеешь ввиду? У тебя в коде подгрузки длл стоит ф-ция IsDebuggerPresent, что странного в том, что она выполняется при загрузке длл? В этом то странного, как раз ничего и нет. Мне странно, что не срабатыват int3. Или, может, я тебя не понял? [add] int3 я пишу в исходнике длл, а не экзешника.
Aspire Дело в том, что все исключения которые возникают внутри функции DLLMain обрабатываются своим внутренним обработчиком. При этом отладочное исключение относится туда же. Логика этого обработчика такова - если возникает любое исключение на стадии инициализации модуля (в DLLMain), то модуль выгружается и LoadLibrary возвращает FALSE. А отладочные сообщения или другие исключения могут обрабатываться отладчиком если они передаются ему финальным обработчиком. Чтобы все таки поймать исключение (или бряк) в DLLMain - в Олли атачимся к нужному процессу (к процессу куда инжектится DLL), при этом в настройках Олли - Debugging Options (Alt + O) -> Events -> ставим галку Break on new module (DLL), другие галки убираем, чтобы лишний раз не останавливаться. После этого просто продолжает исполнение кода. В этом случае Olly остановиться на исключении, т.к. любое исключение будет обрабатываться прежде всего Олли, а уже потом может быть будет передано в функцию DllMainExceptionHandler.