Добрый день. Пытаюсь научится разбирать asm код программы написанной на С++ (например когда запускаю WinDBG или disassebmly window в MS Visaul Studio) для лучшего ориентирования в отладке. Посоветуйте документацию (книги, статьи, что угодно) где изложено как компилятор генерирует asm код из C++ программ. Например: В процессе изучения определил что указатель на объект (можно сказать который в последующем трактуется как "this") передается в регистре ecx перед вызовом метода класса, хотя раньше не мог понять что это такое. Ну вот примеры с разбором подобных вещей в статьях, книгах, тех. доке и хотелось бы почитать. Сюда например еще можно включить: как представляются в asm коде С++ исключения ? как представляются ссылки ? работа с шаблонами ? ну и подобные вещи. Спасибо
Создай еще 6 тем. По правилам форума (да и принято так) обычно на вопросы не отвечают, если создано меньше 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 Вот собственно если бы оно где-то было собрано в одном месте (книге) это было бы замечательно, а то так особенно для новичка не сообразишь где искать
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
burkav Несколько ссылок в копилку: X86 Disassembly - wikibook Обработка исключений Классы, методы, RTTI + как тебе уже посоветовал Clear__Energy пиши тестовые программы, собирай их с разными ключами оптимизации и смотри под отладчиком, что - где - почему и зачем. Удачи
Потому что это ничего не даст, диспетчер исключений находится в CRT, и без понимания хотя бы примерной логики его работы, разобраться в таблицах не просто. Начинать можно с http://www.openrce.org/articles/full_view/21
хм а зачем ему разбирать диспетчер исключений? когда есть плагин idc для IDA которых парсит и раскладает все SEH дальше уже дело наметаного глаза увидеть как это было в С++
Я не знаю, что можно понять по чистому дизасму, без опыта. Поэтому считаю, что лушче компилировать с /FAs и смотреть листинг. И возникнут вопросы, что там за странные данные используются? Вот по той ссылке (прозевал, она уже была выше) есть ответ, плагин к IDA его не даст, а лишь упростит рутину.) Кстати, там и диспетчер не разобран досконально, а на уровне "понимания хотя бы примерной логики".