Как разобраться в asm коде С++ программ ?

Тема в разделе "LANGS.C", создана пользователем burkav, 3 июл 2009.

  1. burkav

    burkav New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    8
    Добрый день. Пытаюсь научится разбирать asm код программы написанной на С++ (например когда запускаю WinDBG или disassebmly window в MS Visaul Studio) для лучшего ориентирования в отладке. Посоветуйте документацию (книги, статьи, что угодно) где изложено как компилятор генерирует asm код из C++ программ. Например: В процессе изучения определил что указатель на объект (можно сказать который в последующем трактуется как "this") передается в регистре ecx перед вызовом метода класса, хотя раньше не мог понять что это такое.

    Ну вот примеры с разбором подобных вещей в статьях, книгах, тех. доке и хотелось бы почитать. Сюда например еще можно включить: как представляются в asm коде С++ исключения ? как представляются ссылки ? работа с шаблонами ? ну и подобные вещи.

    Спасибо
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    создавай еще !
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Создай еще 6 тем. По правилам форума (да и принято так) обычно на вопросы не отвечают, если создано меньше 8 одинаковых тем. Желательно в разных разделах
     
  4. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    А почему по этой жк логике тебе не написать тестовую программу с исключениями, и не подизасмить её?
     
  5. burkav

    burkav New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    8
    Хочется найти в документации чтобы люди которые знают рассказали КАК ПРАВИЛЬНО, а не сидеть и часами пытаться понять что же оно такое
     
  6. burkav

    burkav New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    8
    Извиняюсь не знал. Просто вопрос вроде как относится и к С++ и к асму. Поэтому написал в оба раздела. Думал может человек который знает только один просматривает
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Большинство вещей не стандартизированно.
    Как компилятор хочет, так и транслирует код.
     
  8. burkav

    burkav New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    8
    В таком случае подскажите конкретно по MSVC компилятору. Вот к примеру нашел несколько вещей:

    1. Здесь описано как этот компилятор трактует передачу указателя сам объект при вызове его методов С и БЕЗ переменного значения параметров. Информация довольно таки полезная для меня была

    http://msdn.microsoft.com/en-us/library/ek8tkfbw(VS.80).aspx

    2. Здесь к примеру описано о куках которые компилятор вставляет в код с целью детектирования перетирания стека. Причем с примерами на асме и каждая строка расписана почему так.

    http://msdn.microsoft.com/en-us/library/aa290051(VS.71).aspx

    Вот собственно если бы оно где-то было собрано в одном месте (книге) это было бы замечательно, а то так особенно для новичка не сообразишь где искать
     
  9. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    http://www.wasm.ru/article.php?article=1009001
    http://www.wasm.ru/article.php?article=1009002
    http://www.wasm.ru/article.php?article=1009003
    http://www.wasm.ru/article.php?article=1009004
     
  10. TriX

    TriX Member

    Публикаций:
    0
    Регистрация:
    7 мар 2008
    Сообщения:
    68
  11. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    burkav
    читай Криса :)
     
  12. burkav

    burkav New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    8
    Спасибо всем. Ссылки и инфа весьма полезные !
     
  13. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Потому что это ничего не даст, диспетчер исключений находится в CRT, и без понимания хотя бы примерной логики его работы, разобраться в таблицах не просто. Начинать можно с http://www.openrce.org/articles/full_view/21
     
  14. reversecode

    reversecode Guest

    Публикаций:
    0
    хм
    а зачем ему разбирать диспетчер исключений?
    когда есть плагин idc для IDA
    которых парсит и раскладает все SEH
    дальше уже дело наметаного глаза увидеть как это было в С++
     
  15. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Я не знаю, что можно понять по чистому дизасму, без опыта. Поэтому считаю, что лушче компилировать с /FAs и смотреть листинг. И возникнут вопросы, что там за странные данные используются? Вот по той ссылке (прозевал, она уже была выше) есть ответ, плагин к IDA его не даст, а лишь упростит рутину.) Кстати, там и диспетчер не разобран досконально, а на уровне "понимания хотя бы примерной логики".
     
  16. Andr_

    Andr_ New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    26
    Читай Криса Касперски "Искусство дизассемблирования"