Задача: найти в дизассемблированном коде calc.exe место где осуществляется сложение/вычитание операндов. Дизассемблировал с помощью IDA, пытался искать вызовы CreateEventW. В результате с помощью встроенного(в IDA) отладчика нашел несколько функций которые вызываются при вводе числа и последующем нажатии на кнопку операции. Определил коды этих операций. Пытался по кроссылкам найти функцию где эти операции осуществляются, но довольно быстро заблудился ( Собственно вопрос: Продолжать в том же духе или есть способ проще и конструктивнее?
смотрим WndProc, потом смотрим обработчик WM_COMMAND, смотрим идентификатор кнопки "+", смотрим обработчик. Готово.
n0name Может с + и сработает но вот с - никак нет. Посмотри что происходит после нажатия на кнопку - =) Тут надо скорее искать обработчик кнопки =, там возможно будет case В конкретном случае с IDA очень поможет ее фича по построению графиков F11 и F12
Всем спасибо, там действительно есть обработчик doOperation называется и действительно там есть что то вроде case, почему то у меня сначала ида не распознала большинство функций. Наверно из-за того что она подгружает их с инета, а у меня нету белого IP дома, на работе большинство функций распозналось автоматически. Нашел я эту функцию сложения называется _addrat, вот только никак не просеку как она работает ) никак в отладчике не выловлю числа которые вводил..
Во-первых там два режима работы. В простом режиме точность 16 знаков - это Double float. В инженерном режиме числа супердлинные, т.ч. могут хранится либо прямо в тексте, либо в виде массива float. А addrat может оказатся не только add rat(крысиное сложение), но и addr at и к сложению не иметь никакого отношения, а работать с указателем на число. Чтоб узнать формат хранения нужно смотреть тот же обработчик операции: сначала набранное число сохраняется, потом сама операция тоже сохраняется. Похоже моя рекомендация где искать выполнение сложения , либо пропала, либо в дубле темы. Не надейся найти "сложение" в том месте, где "+". Оно там, где "=" , следующая операция или "(". "(" есть только в инженерном режиме.