Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

нахождение точки входа в дизасемблере

80K
20 марта 2012 года
zebrazoo
2 / / 20.03.2012
Всем доброго времени суток!

Стоит такая задача. Есть старая прога самописная, которая имеет некий механизм сверки с файлом контрольных сумм. Для работоспособности программы соответственно нужен файл, но он утерян. Программа (написана на Дельфи) логически выполняет следующие действия:
1. Отображение формы с кнопкой
2. По нажатию на кнопку происходит чтение файла и некая сверка данных в нем.
3. При ошибке сверки выводится фиксированное сообщение в поле вывода (TText или TRichText) вида "Ошибка бла-бла-бла"
4. Особенность проги в том, что она использует самописную DLL из которой и вызывает функции осуществляющие сверку и возвращающие сообщения (или их текст, точно неизвестно)

Каким способом можно найти точку интерактивно (в дебагере), где осуществляется сверка и соответственно место финального перехода по ошибке сверки?
Пытаюсь освоить IDA, но может лучше SoftIce для данной задачи?
Какие способы установки брейкпоинтов, хуков и т.п. нужно использовать для отлова таких событий, как добавление текста в текстовое поле?
Как установить брейкпоинт и найти код, который выводит заданное сообщение, если текст этого сообщения (т.е. адрес строки) легко находится в DLL?
Буду признателен за любую помощь. Опыт программирования большой, но с ассемблером слабоватый, а с дизасемблером еще меньше. Концепции по верхам знаю, нехватает практики и толчка в нужном направлении :)
316
21 марта 2012 года
Alm3n
889 / / 29.05.2009
Fint all text streeng, потом смотреть, в каком месте строка с сообщении кладётся в стек для вывода. Чуть выше будет механизм валидации, возможно, не в той же функции, а вызванной чуть ранее, нужно присматриваться к jmp. Если нужно отловить ввод текста в поле, то нужно ставить бряк на сообщение окна, точно не помню, как это делается. Кажется, в меню окон. Ещё можно поставить бряк на ReadFile. Потом, когда данные для валидации считаются, отлавливать обращения к буфферу, в который они были считаны. Хотя такой способ у меня не всегда прокатывает. Можно попытаться найти константный адрес буфера через find constant, он где-нибудь будет класться в стек пере вызовом функции валидации, либо сначала копироваться в другой буфер, а потом адрес второго буфера будет класться в стек. Можно и железные бряки попробовать на сегменте памяти на чтнение для буфера.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог