Каноническая форма адреса в long mode

Тема в разделе "WASM.X64", создана пользователем rpy3uH, 19 фев 2009.

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    В long mode виртуальные адреса должны быть в канонической форме. Т.е. в старших 16 битах должны быть только нули или только еденицы. Иначе генерится #GP. Также мне известно что в 64 битных версиях Windows, ядерная память имеет адреса вида 0FFFF************h, а пользовательская память имеет адреса 00000************h.
    Глупый вопрос, но зачем это надо?
     
  2. Alukard

    Alukard New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2010
    Сообщения:
    1
    http://support.amd.com/us/Processor_TechDocs/24593.pdf
    стр.4. 1.1.3. Каноническая адресная форма
    Long mode отводит для пространства виртуальных адресов 64 бита, но конкретно взятые реализации процессоров могут поддерживать меньше 64 бит. Несмотря на то, что некоторые реализации процессоров не используют все 64 бита виртуальных адресов, они все проверяют 63 бита начиная с наиболее значимого реализованного бита (most-significant implemented bit) на предмет того, все ли из них равны единице или все из них равны нулю. Адреса, соответствующие этому требованию как раз и представляют собой каноническую адресную форму. В большинстве случаев ссылка на виртуальную память, которая не представлена в канонической форме, вызывает возникновение исключения основной защиты (general-protection exception) #GP. В то же время неявные ссылки на стек, в которой адрес стека представлен не в канонической форме приводит к возникновению исключения стека (stack exception) #SS. Неявные ссылки на стек включают в себя все push и pop-инструкции, а также все инструкции, использующие RSP и RBP в качестве базовых регистров.
    По средством проверки канонической адресной формы архитектура AMD64 уберегает программное обеспечение от использования неиспользуемых старших битов указателей для других целей. Программное обеспечение, соответствующее канонической адресной форме на специфичной реализации процессора, может быть запущено без перехода на long-mode-реализации, поддерживающие бОльшее пространство виртуальных адресов.