нахождение точки входа в дизасемблере
Стоит такая задача. Есть старая прога самописная, которая имеет некий механизм сверки с файлом контрольных сумм. Для работоспособности программы соответственно нужен файл, но он утерян. Программа (написана на Дельфи) логически выполняет следующие действия:
1. Отображение формы с кнопкой
2. По нажатию на кнопку происходит чтение файла и некая сверка данных в нем.
3. При ошибке сверки выводится фиксированное сообщение в поле вывода (TText или TRichText) вида "Ошибка бла-бла-бла"
4. Особенность проги в том, что она использует самописную DLL из которой и вызывает функции осуществляющие сверку и возвращающие сообщения (или их текст, точно неизвестно)
Каким способом можно найти точку интерактивно (в дебагере), где осуществляется сверка и соответственно место финального перехода по ошибке сверки?
Пытаюсь освоить IDA, но может лучше SoftIce для данной задачи?
Какие способы установки брейкпоинтов, хуков и т.п. нужно использовать для отлова таких событий, как добавление текста в текстовое поле?
Как установить брейкпоинт и найти код, который выводит заданное сообщение, если текст этого сообщения (т.е. адрес строки) легко находится в DLL?
Буду признателен за любую помощь. Опыт программирования большой, но с ассемблером слабоватый, а с дизасемблером еще меньше. Концепции по верхам знаю, нехватает практики и толчка в нужном направлении :)
Fint all text streeng, потом смотреть, в каком месте строка с сообщении кладётся в стек для вывода. Чуть выше будет механизм валидации, возможно, не в той же функции, а вызванной чуть ранее, нужно присматриваться к jmp. Если нужно отловить ввод текста в поле, то нужно ставить бряк на сообщение окна, точно не помню, как это делается. Кажется, в меню окон. Ещё можно поставить бряк на ReadFile. Потом, когда данные для валидации считаются, отлавливать обращения к буфферу, в который они были считаны. Хотя такой способ у меня не всегда прокатывает. Можно попытаться найти константный адрес буфера через find constant, он где-нибудь будет класться в стек пере вызовом функции валидации, либо сначала копироваться в другой буфер, а потом адрес второго буфера будет класться в стек. Можно и железные бряки попробовать на сегменте памяти на чтнение для буфера.