| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Visual C++ и inline asm |
| Автор: bugmenot 13.3.2009, 18:35 | ||||
| Добрый день Visual C++ добавляет какие-то байты (prefixes? Так их называет OllyDbg) некоторым командам в inline asm-е, причем в своем коде он их не добавляет. Например: В какой-то функции скомпилировалась вот такая команда:
А вот так бы она скомпилировалась бы в inline asm-е:
Вопрос: что за 36, зачем он нужен? Такое было и в версии 6.0, и есть сейчас в версии 9.0 |
| Автор: GoldFinch 13.3.2009, 22:26 |
| 36 - SS segment override prefix потому что не надо в винде указывать сегмент в асме олька - показывает дизассемблированный код, а не тот который реально есть, поэтому чтобы получить 8B45 0C надо MOV EAX,DWORD PTR [EBP+C] а SS: в ольке показывается только потому что по умолчанию ebp адресует в сегменте стека |
| Автор: bugmenot 13.3.2009, 23:11 |
| Спасибо! Давно задавался этим вопросом, но думал, что это Visual C++ самовольничает, и как-то забил. А щас вспомнилось, решил спросить. Оказывается самовольничает Олька =) |
| Автор: GoldFinch 14.3.2009, 01:27 |
| просто вывод дизассемблера, в ольке или иде, не предназначен для того чтобы его ассемблировали |
| Автор: bugmenot 5.4.2009, 13:55 | ||||
| Вопрос на эту же тему VC Добавляет комманду WAIT перед каждой FPU командой Например пишу:
Получается:
Как его от этого отучить? Свой код то он без WAIT-ов компилирует, значит не нужны они |