КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Перехват исключений (SEH)
Создание библиотек dll Перехват сообщений Windows Перехват API Примеры Способы обработки отладочных событий 1. Читать и писать в память отлаживаемого процесса a. Дескриптор процесса b. Адрес в памяти процесса, куда читать c. Адрес строки в отладчике куда читать d. Количество байтов e. Реально прочитанное количество байт 2. Работа с контекстом (работа с регистрами отлаживаемого процесса) a. Дескриптор потока b. Адрес структуры CONTEXT (хранятся значения регистров) 3. Точки остановки BREAKPOINTS
Отладка wink.exe Запуск wink.exe При нажатии на кнопку расчет получится число 6. Нужно написать отладчик, чтобы wink.exe под отладчиком работала иначе. Она выводит ImageBase (при CREATE_PROCESS_DEBUG_EVENT), потом значение регистра EIP (EXCEPTION_BREAKPOINT, 1 раз), Key (пароль, выводится при EXCEPTION_BREAKPOINT, 2 раз) и только после этого появится тот диалог. Int 3 – ставится тоже при CREATE_PROCESS_DEBUG_EVENT (также предварительно записывается байт) При ECXEPTION_BREAKPOINT – наращиваем счётчик брэйкпоинта При втором брэйке, вывести ключ, восстановить программу Когда конец работы – выводим MessageBox._ Джерри Рихтер - создание эффективных Win32 приложений Structure Exception Handler В языках высокого уровня это на уровне try/catch, но программа громадно раздувается. Мы рассмотрим обработку исключений на уровне Win32 (на низком уровне) Есть область TIB (системная область), на нее указывает регистр FS, в начале области находится адрес структуры SEH, а одно из полей структуры указывает на обработчик исключений. (Косвенная адресация на обработчик исключений) Структура SHE содержит 5 полей, но мы рассмотрим 2 из них: 1. prevLink – указывает на следующий SEH (структуру SEH) 2. currentHandler() – напрямую указывает на обработчик исключений 3. … Структура должна находится в системном стеке, у каждой структуры свой обработчик Обработчики работают на уровне ядра. Наша задача – написать обработчик, который при доступе к нижнему предохранительному блоку, выдаётся сообщение Пример: При обращении к адресу 0, выводим MessageBox. Нам нужно сделать новый SEH, указать на него и prevLink’ом указать на следующую структуру и создать свой обработчик
.data push FS: [0]; prevLink mov FS:[0], ESP;сформировали 2 действие (указатель на наш SEH) mov eax, 0 mov [eax], eax SehHandler PROC invoke MessageBox, 0, addr str1, NULL, MB_ICONERROR pop FS:[0] add ESP, 8 mov eax, 1;передано управление следующему обработчику ret endp
Если мы хотим, чтобы серого окошка не было, мы можем добавить поля в SEH. В структуре SEH могут существовать 3 поля, которые позволяют после исключения не выходить из программы, а переходить на безопасное место в программе (исправление исключений)
Дата добавления: 2014-01-06; Просмотров: 417; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |