Описание GDT

Тема в разделе "WASM.ASSEMBLER", создана пользователем nixman, 30 дек 2008.

  1. nixman

    nixman New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2008
    Сообщения:
    6
    Здравствуйте! Такой-вот вопросик у меня (а точнее, просьба):
    При сегментной адресации памяти линейный адрес получается через селектор, который описан в GDT (берём в учёт что TI=0) + смещение. Но чтобы колдовать над всем этим, в P-mode надо сперва:
    1). Создать (описать) саму дескрипторную таблицу.
    2). Подготовить дескрипторы.
    3). Загрузить всё это в память.
    Вот как это сделать? Мне нужен конкретный (наиболее понятный пример) создания таблицы GDT с адресом базы, пределом, а ещё и пример создания дескриптора/дескрипторов с пределом, базой и его флагами (права доступа, etc).
    Желательно под *NIX-систему, хотя это и не особо важно.
    Заранее благодарен!
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    http://www.wasm.ru/publist.php?list=24
     
  3. nixman

    nixman New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2008
    Сообщения:
    6
    Я всё это перечитал - нету там такого.
     
  4. nixman

    nixman New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2008
    Сообщения:
    6
    А вот что я нашёл:
    Код (Text):
    1. gdt:
    2. gdt_null:   dw 0, 0, 0, 0   ; Нулевой дескриптор - Здесь мне всё ясно - 8 байт заполняются нулями
    3.  
    4. gdt_code:
    5.     db 0xFF    
    6.     db 0xFF    
    7.     db 0x00
    8.     db 0x00
    9.     db 0x00
    10.     db 10011010b
    11.     db 0xCF
    12.     db 0x00
    - а вот заполнение gdt_code неясно совсем. В какой последовательности эти поля заполняются? Как узнасть какое из этих 8 полей база, предел, DPL, права доступа и тд?
     
  5. nixman

    nixman New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2008
    Сообщения:
    6
    А вот нашёл более подробно:
    Код (Text):
    1. ; Сегментный дескриптор
    2.     limit_low   dw      0    ; Младшие два байта поля Segment limit
    3.     base_low    dw      0    ; Младшие два байта поля Base Address
    4.     base_high0  db      0    ; Второй байт поля Base Address
    5.     type_and_permit db  0    ; Флаги
    6.     flags       db      0    ; Ещё одни флаги
    7.     base_high1  db      0    ; Старший байт поля Base Address
    Всё равно не понятно. Я ожидал тут встретить Базовай адрес, предел, бит гранулярности и всё то что включает в себя 64 битная структура дескриптора. А тут какие-то "Младшие два байта", "Второй байт"... Может кто-либо разъяснить? как правильно описывать дескриптор?
     
  6. nixman

    nixman New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2008
    Сообщения:
    6
    А, всё, вроде нашёл: http://sergh.pisem.net/protected/02_segments.html#IDA0OYGD
    :=)
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    загугли struct _LDT_ENTRY
    виндовая структура, описывающая поля LDT. отличается мало, как я помню. зато красиво и с битовыми полями.
    или в статьях, на кноторые ссылка выше, тоже есть красивые картинки - что где
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    nixman
    Возьми маны от интел или амд. Там формат расписан. Так как защищенный режим появился в х286 то в дескрипторе полная каша. Флага лимиты база все перемешено.
     
  9. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    можно почитать
    http://www.sasm.narod.ru/