Модели памяти

Тема в разделе "WASM.OS.DEVEL", создана пользователем AntiB, 28 ноя 2007.

  1. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    SII
    но мы то говорим о стеке
    ESP (RSP) обычно уменьшается
    т. е переполнение и прочие неприятности могут произойти именно в этом случае
    лимит здесь дает стопроцентную защиту, потому что не завязан на n-ое количество страниц-ловушек
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    AntiB
    советую сделать обычный бинарный файл
     
  3. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    rei3er
    сделал простой бинарник - дальше идет ребут :dntknw:
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    rei3er
    Обычно указатель стека уменьшается на небольшую величину (явно меньшую размера страницы) -- в этом случае одна защитная страница вполне спасает. Ну а для большого уменьшения (когда у подпрограммы выше крыши локальных переменных), нормальные компиляторы не просто sub esp, что-то там делают, а вызывают подпрограмму, которая проверяет на отсутствие переполнения стека. Понятное дело, что подпрограмма медленнее работает, чем "кремниевая" защита через лимит, но тонна локальных переменных -- это всё же исключение, а не правило (если не криворукий прогу писал, есно).
     
  5. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    вот код бинарника - где ошибка? кто-то может мне помощь?
    Код (Text):
    1. use16
    2. org 0x100
    3.  
    4. start:
    5.     mov     ax, 0x03
    6.     int     0x10
    7.  
    8.     cli
    9.  
    10.     in      al, 0x70
    11.     or      al, 0x80
    12.     out     0x70, al
    13.  
    14.     in      al, 0x92
    15.     or      al, 0x02
    16.     out     0x92, al
    17.  
    18.     xor     eax, eax
    19.     mov     ax, cs
    20.     shl     eax, 0x04
    21.     add     eax, gdt
    22.     mov     [gdtr+0x02], eax
    23.  
    24.     lgdt    fword [gdtr]
    25.  
    26.     mov     eax, cr0
    27.     or      al, 1
    28.     mov     cr0, eax
    29.  
    30.     xor     eax, eax
    31.     mov     ax, cs
    32.     shl     eax, 0x04
    33.     add     eax, pm_entry
    34.     mov     [pm], eax
    35.  
    36.     db      0x66
    37.     db      0xea
    38. pm  dd      0x00
    39.     dw      fcode_descr
    40.  
    41. pm_entry:
    42.     mov     ax, fdata_descr
    43.     mov     ds, ax
    44.     mov     es, ax
    45.  
    46.     inc     byte [es:0xb8000]
    47.  
    48.     jmp     $
    49.  
    50. include 'pmode.inc'
    51.  
    52. fcode_descr =   (fcode_desc-null_desc)
    53. fdata_descr =   (fdata_desc-null_desc)
    54.  
    55. gdtr:
    56.     dw  gdt_size-1
    57.     dd  0
    58.  
    59. gdt:
    60.     null_desc   desc_struc  0,0,0,0,0,0
    61.     fcode_desc  desc_struc  0xffff,0,0,code_acc,0xc0,0
    62.     fdata_desc  desc_struc  0xffff,0,0,data_acc,0xc0,0
    63.  
    64. gdt_size    =   ($-gdt)
     
  6. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Пройдись bochsdbg - сразу поймёшь, что не так.
     
  7. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    SadKo
    сам прикол в том что - кажется всё хорошо сделал, так как если до jmp поставить код:
    Код (Text):
    1. mov ax, fdata_descr
    2. mov es, ax
    3. inc byte [es:0x0b8000]
    4.  
    5. jmp $
    то всё работает - тесть нормально настроил gdt, а вот far jmp - что-то не хочет работать, хотя дебагел часть кода - то, кажется всё норм находило физический адрес (дебагил не в bochs, так как ним никогда не пользовался)
     
  8. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    способом проб и ошибок узнал что ребут идет когда делается эта команда(уже в защищенном режиме!):
    Код (Text):
    1. pm_entry:
    2.     mov     ax, fdata_descr
    3.     mov     ds, ax
    4.     mov     es, ax
    5.  
    6.     inc     byte [es:0xb8000] ;<----- здесь!!!! если поставить ее в комментарии, то ребут не идет! почему?????
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    AntiB
    такой инструкции нет
    Код (Text):
    1. use16
    2. org 0x7С00
    3. start:
    4.     mov    ax, 0x03
    5.     int    0x10
    6.     cli
    7.     in    al, 0x70
    8.     or    al, 0x80
    9.     out    0x70, al
    10.     in    al, 0x92
    11.     or    al, 0x02
    12.     out    0x92, al
    13.         xor    ax, ax
    14.         mov    ds, ax
    15.         db    0x66
    16.         lgdt    fword [gdtr]
    17.     mov    eax, cr0
    18.     or    al, 1
    19.     mov    cr0, eax
    20.     db    0x66
    21.     db    0xea
    22.         dd    @F
    23.     dw    1 SHL 3
    24. use32
    25. @@:
    26.     mov    ax, 2 SHL 3
    27.     mov    ds, ax
    28.     mov    es, ax
    29.         mov    dword [0xB8000], 0xF31
    30.         hlt
    31.  
    32. gdtr:
    33.     dw    gdt_size-1
    34.     dd    gdt
    35. gdt:
    36.         dq    0x0000000000000000
    37.         dq    0x00CF9A000000FFFF
    38.         dq    0x00CF92000000FFFF
    39.  
    40. gdt_size = $ - gdt
     
  10. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    rei3er
    знаете почему ваш код работает? - потому что у него cs = 0x00 то есть вам надо тока ip указать куда пригнуть - а мне надо найти физический адрес, так как моя прога грузиться куда захочет (вернее ДОС ей даст)
    впервые слышу, хотя может вы правы
     
  11. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    нашел ошибку, надо так:
    Код (Text):
    1. use32
    2. pm_entry:
    3.     mov     ax, fdata_descr
    4.     mov     ds, ax
    5.     mov     es, ax
    6.  
    7.     inc     byte [es:0xb8000]
    глупее ошибки нету - всём спасибо за помощь
     
  12. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    это я ошибся
    есть конечно
     
  13. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    у меня вопрос по модели памяти - Flat - как сделать ограничение по доступности памяти? как сделать, чтобы программа не могла работать с памятью, которой ОС ей не выделила???
     
  14. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    четай о механизмох защиты ПМ со включенной строничной адресацией ;)
     
  15. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Freeman
    спс, почитаю
     
  16. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    rei3er
    Лучше б сначала матчасть поучили б ;) Есть такая инструкция, это MOV CS, *** нет.
     
  17. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    вообще говоря вы бы сначала прочитали выше по тексту
     
  18. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    rei3er
    Вообще-то "выше по тексту" никак не влияет на то, что Вы не знали о существовании упомянутой инструкции. Так что учить матчасть всё-таки надо.

    AntiB
    Использовать страничную организацию памяти и осуществлять защиту на уровне страниц. Заодно и виртуальную память реализуете :)
     
  19. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    1. О существовании инструкции я знал
    2. Я перепутал ее с инструкцией mov CS, <register>
    3. Обычно я использую GAS с AT&T синтакисом, где порядок операндов изменен на обратный
    OFFTOP
    прежде чем говорить о чьей-либо некомпетентности нужно иметь на то основания