Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Я? Путаю? Да не может такого быть! :-) 20.08.09 13:22 Число просмотров: 2315
Автор: amirul <Serge> Статус: The Elderman
|
А если серьезно, я просто думал, что gdtr/idtr тоже содержат физические адреса. Ошибся, но нулевые адреса от этого не стали использоваться для чего то кроме отлова нулевых указателей.
> > Причем здесь GDT/IDT? Физические адреса несколько > > отличаются от линейных, ага
> Естественно! Только не путай сегментацию со страничной > организацей. У дескриптора страницы отсутствует поле Выше
> Все сегменты в ядре NT имеют базу 0. Не все :-P
Но не суть. Мы сейчас говорим именно о флетовых сегметах (да в общем о любых, которые позволяют обратиться к ЛИНЕЙНОМУ адресу 0).
> > > Очень похоже, что эти 64Кб отведены на поддержку > схемы > > > адерсации (каталог таблиц страниц, GDT системы и > IDT) Каталог страниц всю жизнь начинался с C0000000. Да и вообще крайне логично не держать в юзерских адресах вообще ничего критичного, а до ядерных адресов "не достают" юзерские селекторы.
Ну провел небольшой тест:
kd> dd nt!KiAbiosGdt l poi(nt!KeNumberProcessors)
80551ee0 8003f000 ---
KiAbiosGdt - это такая табличка, в которой хранятся базовые адреса для gdt для всех процессоров.
Ну еще и такое писал:
int
main() {
long gdt = 0, idt = 0;
__asm {
sgdt gdt
sidt idt
}
}
---
Тоже выдает старшие адреса
kd> !pte 0
VA 00000000
PDE at 00000000C0600000 PTE at 00000000C0000000
contains 0000000002AB0067 contains 0000000000000000
pfn 2ab0 ---DA--UWEV ---
Нет там ничего. Для него даже PTE нет.
> > > никак не связаны с нулевым указателем. Только с ним и связаны. Там вообще памяти нет.
> > Отлов разыменований нулпоинтеров - ЕДИНСТВЕННОЕ > > предназначение той дырки в адресном пространстве. > > Для этого не обязательно отслеживать обращение к 16-ти > страницам, достаточно только к одной - к первой страницы > первого каталога. А давно ли все структуры данных стали меньше 4к?
struct Data {
int padding[10000];
int field;
};
struct Data *data = (struct Data *)NULL;
data->field = 1;
---
Можно было бы и больше зарезервировать, но 64к кажется достаточно большим, чтобы отловить подавляющее большинство структур
> 64Кб как раз максимальный размер таблицы дескрипторов > сегментов. Почти уверен, что место полностью отведено под > IDT, хранящую дескрипторы шлюзов ловушек прерываний. Зря уверен. Там нет памяти. Вообще. MEM_FREE. Np. Да и с чего бы хранить такую важную инфу в юзерском адресном пространстве?
|
|
|