Индетификация ...

Тема в разделе "WASM.BEGINNERS", создана пользователем BattleWIZ, 7 апр 2010.

  1. BattleWIZ

    BattleWIZ New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2010
    Сообщения:
    4
    Мне вот такую темку дали:
    Нужно рассказать о том, как по дизассемблерному листингу можно
    идентифицировать указанные конструкции. Как это делает Olly и IDA.
    Привести примеры идентификации. Желательно рассмотреть 2 компилятора
    Си: MS VC++ и gcc для win32. Если хватит желания, то еще и
    борландовский от Builder c++.

    вот чето я не могу понять как это сделать именно как идентифицировать их?
    статьи http://www.wasm.ru/article.php?article=1009002 как я понял не это совсем то...
     
  2. BattleWIZ

    BattleWIZ New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2010
    Сообщения:
    4
    кострукции : while, if, case ...
     
  3. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    ну скомпильте попроще примеры с дебуг инфой, да и посмотрите. только, компильте без оптимизации. с хорошей оптимизацией вы и функции отдельные можете не идентифицировать
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    BattleWIZ
    На сайте wasm.ru полно статей, в том числе статьи Криса Касперски
    Идентификация IF - THEN - ELSE
    Идентификация SWITCH - CASE - BREAK
    Идентификация циклов
    Но это неполные версии, в полных журнальных статьях как раз сравнивается, как аналогичные конструкции представляют разные компиляторы. А на самом деле последуйте совету qqwe компилируйте программу MS VC++ и gcc и посмотрите через Olly во что этот код превращается
     
  5. izlesa

    izlesa New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    6
    BattleWIZ
    Если не секрет, кто вам такие темы даёт и где? =)
    По идентификации конструкций всё довольно просто - слежение за сравнениями, флагами и передачей управления, у Криса действительно неплохо разобрано.

    >>вот чето я не могу понять как это сделать именно как идентифицировать их?
    что непонятного то? Берете дизасм, и проходите по коду, ища нужные вам инструкции.

    Mikl___
    Гым, я наверное довольно невнимательный, но помоему в русскоязычных источниках кроме Криса эту задачу никто не рассматривал. Или я ошибаюсь?
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    izlesa
    Я о статьях Криса на http://www.insidepro.com/rus/doc.shtml "Мощь и беспомощность автоматической оптимизации", "С-шные трюки от мыщъх'а", "Война миров: Ассемблер против Cи" и другие
     
  7. BattleWIZ

    BattleWIZ New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2010
    Сообщения:
    4
    А про таблицу переходов кто что может сказать? а то не которые компиляторы их генерирует и как то они связаны с идентификацией ...
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Когда значения switch/case идут подряд, компилятор может использовать таблицу переходов. Например, для такого кода:
    Код (Text):
    1. switch(var)
    2. {
    3. case 0:
    4.     do_something0;
    5. case 1:
    6.     do_something1;
    7. case 2:
    8.     do_something2;
    9. case 3:
    10.     do_something3;
    11. case 4:
    12.     do_something4;
    13. }
    компилятор может сделать что-то в духе:

    Код (Text):
    1.   mov eax, [var]
    2.   cmp eax, 0x4
    3.   ja .done_everything
    4.   jmp [table + eax * 4]
    5. do_something0:
    6.   ...
    7.   jmp .done_everything
    8. do_something1:
    9.   ...
    10.   jmp .done_everything
    11. do_something2:
    12.   ...
    13.   jmp .done_everything
    14. do_something3:
    15.   ...
    16.   jmp .done_everything
    17. do_something4:
    18.   ...
    19. .done_everything:
    20.   ...
    21.  
    22. table:
    23. dd do_something0
    24. dd do_something1
    25. dd do_something2
    26. dd do_something3
    27. dd do_something4
    В IDA, кстати, эти переходы всегда легко узнаваемы.
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Так, ну там, конечно, в коде должно быть 'do_something0, do_something1'. Редактирование бы вернуть...
     
  10. BattleWIZ

    BattleWIZ New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2010
    Сообщения:
    4
    Интересная штука, а почитать по этому поводу где можно?
     
  11. TriX

    TriX Member

    Публикаций:
    0
    Регистрация:
    7 мар 2008
    Сообщения:
    68
    BattleWIZ
    Например это
    см. branches, loops, data structures, objects and classes и т.д.
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Пирогов "Ассемблер и дизассемблирование": рассмотрены условные конструкции, циклы и т.д., написанные на ЯВУ, и как их "переваривает" ассемблер. IMHO тема, поднятая ТС, как раз и перекликается с этой книгой