Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Visual C++ и inline asm, Какие-то лишние байты, зачем? 
V
    Опции темы
bugmenot
Дата 13.3.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



Добрый день

Visual C++ добавляет какие-то байты (prefixes? Так их называет OllyDbg) некоторым командам в inline asm-е, причем в своем коде он их не добавляет.

Например:
В какой-то функции скомпилировалась вот такая команда:
Код

004032E6  |. 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]


А вот так бы она скомпилировалась бы в inline asm-е:
Код

004010BC   . 36:8B45 0C     MOV EAX,DWORD PTR SS:[EBP+C]


Вопрос: что за 36, зачем он нужен?
Такое было и в версии 6.0, и есть сейчас в версии 9.0
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
GoldFinch
Дата 13.3.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



36 - SS segment override prefix
потому что не надо в винде указывать сегмент в асме

олька - показывает дизассемблированный код, а не тот который реально есть, поэтому
чтобы получить 8B45 0C надо  MOV EAX,DWORD PTR [EBP+C]
а SS: в ольке показывается только потому что по умолчанию ebp адресует в сегменте стека

PM MAIL ICQ   Вверх
bugmenot
Дата 13.3.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



Спасибо!

Давно задавался этим вопросом, но думал, что это Visual C++ самовольничает, и как-то забил.
А щас вспомнилось, решил спросить.
Оказывается самовольничает Олька =)
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
GoldFinch
Дата 14.3.2009, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



просто вывод дизассемблера, в ольке или иде, не предназначен для того чтобы его ассемблировали
PM MAIL ICQ   Вверх
bugmenot
Дата 5.4.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



Вопрос на эту же тему

VC Добавляет комманду WAIT перед каждой FPU командой
Например пишу:
Код

__asm finit

Получается:
Код

00401000  /$ 9B             WAIT
00401001  |. DBE3           FINIT


Как его от этого отучить?
Свой код то он без WAIT-ов компилирует, значит не нужны они
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.