Поиск нужной функции в дизассемблированной программе

Тема в разделе "WASM.BEGINNERS", создана пользователем vailiy, 8 дек 2009.

  1. vailiy

    vailiy New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2009
    Сообщения:
    2
    Задача: найти в дизассемблированном коде calc.exe место где осуществляется сложение/вычитание операндов.

    Дизассемблировал с помощью IDA, пытался искать вызовы CreateEventW. В результате с помощью встроенного(в IDA) отладчика нашел несколько функций которые вызываются при вводе числа и последующем нажатии на кнопку операции. Определил коды этих операций. Пытался по кроссылкам найти функцию где эти операции осуществляются, но довольно быстро заблудился (

    Собственно вопрос: Продолжать в том же духе или есть способ проще и конструктивнее?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    смотрим WndProc, потом смотрим обработчик WM_COMMAND, смотрим идентификатор кнопки "+", смотрим обработчик. Готово.
     
  3. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    n0name
    Может с + и сработает но вот с - никак нет. Посмотри что происходит после нажатия на кнопку - =)
    Тут надо скорее искать обработчик кнопки =, там возможно будет case В конкретном случае с IDA очень поможет ее фича по построению графиков F11 и F12
     
  4. vailiy

    vailiy New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2009
    Сообщения:
    2
    Всем спасибо, там действительно есть обработчик doOperation называется и действительно там есть что то вроде case, почему то у меня сначала ида не распознала большинство функций. Наверно из-за того что она подгружает их с инета, а у меня нету белого IP дома, на работе большинство функций распозналось автоматически.

    Нашел я эту функцию сложения называется _addrat, вот только никак не просеку как она работает ) никак в отладчике не выловлю числа которые вводил..
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Во-первых там два режима работы. В простом режиме точность 16 знаков - это Double float.
    В инженерном режиме числа супердлинные, т.ч. могут хранится либо прямо в тексте, либо в виде массива float. А addrat может оказатся не только add rat(крысиное сложение), но и addr at и к сложению не иметь никакого отношения, а работать с указателем на число.
    Чтоб узнать формат хранения нужно смотреть тот же обработчик операции: сначала набранное число сохраняется, потом сама операция тоже сохраняется. Похоже моя рекомендация где искать выполнение сложения , либо пропала, либо в дубле темы. Не надейся найти "сложение" в том месте, где "+". Оно там, где "=" , следующая операция или "(". "(" есть только в инженерном режиме.
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А может addrat : add ratio - сложение дробных частей :)