проверка памяти в защищенном режиме

Тема в разделе "WASM.BEGINNERS", создана пользователем Neuron, 17 сен 2006.

  1. Neuron

    Neuron New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2006
    Сообщения:
    10
    Нужно написать прогу для проверки оперативной памяти в защищенном режиме. Как лучше это сделать?
     
  2. Ole

    Ole Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    69
    В чистом ПМ или под ОС? Проверку на сбои ячеек или что-то другое?
     
  3. Neuron

    Neuron New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2006
    Сообщения:
    10
    Да, нужна проверка именно простая проверка на сбои ячеек. Как это можно сделать через DPMI?
     
  4. Ole

    Ole Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    69
    DPMI экстендеров много :)
    Если совсем просто - делаешь таблицу GDT. Создаешь сегмент данных R/W по максимуму. И твоя программа тупо записывает какое-либо значение в ячейки, потом считывает и сравнивает (надежнее писать разные значения- есть малая вероятность совпадения со сбойным). Если отличается - ячейка сбойная. И так всю память. Когда пространство закончится, возникнет исключение, здесь, если будет обработчик, можно определить сколько памяти стоит. Если писать обработчик нет желания, тогда можно перед тестом подсмотреть в БИОС. Лучше всего, конечно объем памяти узнать у чипсета, но этот метод не универсален, если у тебя конечно нет спецификаций под все северники.
    Написал первое что пришло в голову, а вообще в форуме уже были темы.
     
  5. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    вообще то поиск по форуму рулит. А вот загрузиться в проверочку под дос екстендером это глупость, ибо можешь повредить системные таблицы и свой код, хотя, если расположить всё это в первом метре озу а проверять всё остальное, то можно. А лучше переключиться в нереальный режим и там уже сканить
     
  6. Neuron

    Neuron New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2006
    Сообщения:
    10
    Ок. Допустим, память будет проверяться начиная со второго мегабайта. Тогда надо создать дескриптор сегмента данных с базой 100000h, установить для него лимит 4Gb, и последовательно проверять ячейки памяти. Так что ли? Тогда у меня возникли следующие вопросы. 1) как написать обработчик исключения, которое возникнет, когда физическая память закончится? 2) можно ли через функцию DPMI 500h получить количество физических страниц, умножить это число на размер страницы и установить как лимит для сегмента данных?
     
  7. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Я сомневаюсь что возникнет исключение. Скорее всего будешь читать FF. Размер памяти вроде-бы где-то в BIOS есть... Вот к примеру:

     
  8. Ole

    Ole Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    69
    Возникнет. При условии что чипсет ровненько на конец ОЗУ ничего не смаппировал. А в RM действительно будет писаться в пустоту и читаться FF. Но надо признать я не подумал с высказыванием. Потому что, как раз если первые байты после конца ОЗУ будут мап какого нибудь чипсета, то результат не заставит себя ждать :)
    Лучше действительно, перед входом в PM спросить БИОС о размере памяти и быть уверенным.
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Зачем писать если не знаешь?
    Исключения никакого не будет.
    Всё будет отлично читаться/писаться.
    Исключение возникает только при выходе за границы сегмента или при обращении к странице памяти помеченной в таблице страниц как неприсутствующая.
    С физической памятью это никак не связано.
    Сделай сегмент 4Гб и читай/пиши куда хочешь.
    Просто при отсутствующей памяти в ячейке всегда будет FFh
     
  10. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Ole
    Вопервых никто не горонтирует, что сама память смепированна ровна. По этому советую определять доступную память, через биос смотри атач.
     
  11. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    вот делал когда-то в детстве для дефектовки симов-димов
    но оно для real-mode
     
  12. Ole

    Ole Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    69
    Исключения никакого не будет. Всё. Выспаться мне пора. Уже хотел аттач приложить, как случайно заметил что размер сегмента данных стоял FFFFFFF0, а писал намеряно в последнюю ячейку. И получилось естественно Исключение возникает только при выходе за границы сегмента :dntknw: Эх...
     
  13. xpam

    xpam New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    1
    Можно ли этот тест под виндой сделать?
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    да можно конечное
    пишешь драйвер
    который все останавливает в том числе все интеррупты дизаблит
    сохраняет системные таблицы
    готовит свою - плоскую такую типа прямое отображение
    запускает тесты
    потом все восстанавливает
    только в реал, вернее унреал моде все это в 100 раз проще