Сейчас на форуме: jinoweb (+6 невидимых) |
eXeL@B —› Программирование —› Windows выхватывает исключение из отладчика |
Посл.ответ | Сообщение |
|
Создано: 17 декабря 2017 18:46 · Личное сообщение · #1 В программе создаётся исключение вида переполнения буфера. Исключение возникает в функции gets_s(buf, size). Я для примера, символьный буфер buf задал на 10 символов, размер size вводимого функцией массива задан на 5 символов. При вводе 5 символов или более возникает исключение и программа закрывается. Хотелось бы остановить отладчик на этом исключении, однако Windows 7 выхватывает его, и с этим не справляются ни отладчик IDA, ни OllyDbg. Между тем Windows XP так не поступает - здесь всё нормально: она спрашивает на возможность отладки. Может кто встречался с подобной ситуацией и знает как умерить аппетит Windows 7 в отношении программных исключений ? ---------------------------------------------------------------------- За основу пример взят из части 21 курса Нарвахи для IDA , перевод Яши. Код программы: Code:
|
|
Создано: 17 декабря 2017 19:20 · Поправил: deniskore · Личное сообщение · #2 |
|
Создано: 17 декабря 2017 19:45 · Личное сообщение · #3 |
|
Создано: 17 декабря 2017 20:56 · Личное сообщение · #4 |
|
Создано: 17 декабря 2017 21:14 · Поправил: deniskore · Личное сообщение · #5 difexacaw пишет: При i29 процесс должен сразу киляться, без разворачивания исключения. Как частный случай при ловушке на переполнение процесс снимается. Проверил в x64DBG и IDA PRO при INT 29h (эту инструкцию использует ucrtbase в новых версиях MSVC) ничего не киляется, дебагер управление получает. (Win 8-10) |
|
Создано: 17 декабря 2017 21:45 · Личное сообщение · #6 KiRaiseSecurityCheckFailure -> KiFastFailDispatch -> KiDispatchException -> отладчик походу вызывается. Это я не совсем верно сказал, вроде как локально исключение в процессе не поднимается. Переполнение стека в NtMapView: PsValidateUserStack: DbgkForwardException(STATUS_STACK_BUFFER_OVERRUN) ZwTerminateProcess(). ----- vx |
|
Создано: 18 декабря 2017 18:36 · Личное сообщение · #7 Спасибо! Многое вы все сказали! - я так глубоко с исключениями не знаком и буду разбираться. Столкнулся из-за попытки пройти часть 21 Нарвахи. Код, который я привёл, я прогонял только на WinXP - там всё хорошо идёт и в OllyDbg и в IDA. Там собирал с помощью MSVC2008, и он, конечно, не идёт в Win7 - другие библиотеки. В Win7 я использовал пример Нарвахи. Думаю, собирал он с MSVC2015. ----------------------------------------------------- Теперь, что я успел надёргать на Win7: Отладчик OllyDbg как-то справляется: нажал крест на сообщении Windows, появляется опять такое же; я опять давлю крест - процесс terminated, но не выгружается из отладчика и можно разбирать на чём он остановился. --------------- Наверное,также бы надо поступать и с IDA'ой, но нет возможности проверить это. IDA закрывает процесс без какого-либо сообщения. И от Windows нет сообщения, и в журнале сообщений нет соответствующей записи По всей видимости, блокирует IDA, пишет лишь в строке состояния код выхода: -1073740777, что соответствует коду исключения С0000417. Этот код я внёс в список исключений (там уже был код подобного исключения С00000FD EXCEPTION_ STACK_OVERFLOW) , но это ничего не изменило. В самом начале, когда я только приступал к этому исключению, IDA пропускала Windows сообщение, и возможно оно было такое же, как оно сейчас идёт от OllyDbg. Но, похоже, IDA всё это порядком надоело, и она просто закрывает процесс! Чтобы получить то исходное состояние, я пробовал по разному: и удалял *.idb , и переименовывал программу, и переносил в другую папку - всё без толку! Добавлено спустя 18 часов 23 минуты --------------------------------------------------------------------------- Прерывание, механизм исключения - это,конечно, очень важно! Но сейчас хотелось бы знать как остановить отладчик IDA при этом исключении и разобрать что программа уже успела сделать перед исключением. |
|
Создано: 24 декабря 2017 17:43 · Личное сообщение · #8 |
eXeL@B —› Программирование —› Windows выхватывает исключение из отладчика |
Эта тема закрыта. Ответы больше не принимаются. |