Поиск:

Ответ в темуСоздание новой темы Создание опроса
> расстояние между метками 
:(
    Опции темы
GoldFinch
Дата 30.3.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Код

    size_t codeSize;
    __asm {
        mov codeSize, (offset code_end - offset code_start)  // error C2425: -: неконстантное выражение в 'второй операнд'
        jmp code_end
code_start:
        ...............
code_end:
    }

почему неконстантное, и как сделать константным?
PM MAIL ICQ   Вверх
ИванМ
Дата 30.3.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



чем так плохо:
Код

size_t codeSize;
__asm {
    mov eax, offset code_end 
    sub eax, offset code_start
        mov codeSize, eax 
        jmp code_end
code_start:

code_end:
    }


видимо глюк масма, потому что на самом деле адрес метки это константное значение

Это сообщение отредактировал(а) ИванМ - 30.3.2010, 21:41
PM MAIL   Вверх
ИванМ
Дата 30.3.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



а вообще я торможу. реальные адреса будут известны только после выполнения программы, система сама их проставит (+ImageBase, +VirtualOffset). так что адреса меток это неконстантные значения, и можно делать только через mov и sub, как я написал
PM MAIL   Вверх
GoldFinch
Дата 30.3.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(ИванМ @  30.3.2010,  21:57 Найти цитируемый пост)
реальные адреса будут известны только после выполнения программы, система сама их проставит (+ImageBase, +VirtualOffset). так что адреса меток это неконстантные значения, и можно делать только через mov и sub, как я написал 

да что ты говоришь, неужели все инструкции с операндом типа offset можно на свалку выкидывать, раз статически никакие адреса не узнать?)

mov eax, offset code_end 
компилится как mov eax, 100000xxx
если код грузится по другой базе - все смещения корректируются таблицей релоков
но в любом случае, разница между адресами - она постоянная, какая бы база ни была
PM MAIL ICQ   Вверх
ИванМ
Дата 30.3.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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


 




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


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

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