903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
1 | |
В какой памяти находится PEB?23.02.2015, 23:21. Показов 1769. Ответов 4
Метки нет (Все метки)
В книжке Robert Custer "WinDbg. From A to Z!" на 26 странице изображена вот такая схема: (см. сложение). На ней структуры PEB и TEB размещены над чертой, разделяющей user- и kernel-режимы (в области адресного пространства процесса).
Для получения указателя PEB используется функция NtQueryInformationProcess. которая, судя по префиксу "Nt" должна вызываться из режима ядра. ВОПРОС(ы): как функция ядра может работать с "пользовательской" памятью (она же выделяется из выгружаемого пула?) А как же возможные страничные ошибки на высоком IRQL? Или не любая функция в режиме ядра вызывается с повышением IRQL до уровня DPC/dispatch? На картинке все правильно? P.S.: в WinDbg команда !peb показывает (для текущего процесса, т.е. для самого отладчика):
0
|
23.02.2015, 23:21 | |
Ответы с готовыми решениями:
4
Найти ошибку: нужно вывести в какой четверти находится точка, если на оси, то указать на какой Построить зависимость Peb от N и от комбинаций Определить, на какой странице находится строка номер n и какой по счёту будет эта строка на странице В какой библиотеке находится MouseEvent? |
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|
18.03.2015, 09:10 [ТС] | 2 |
Все правильно, Robert Custer не обманул. Недавно прочитал в книге М. Руссиновича "Внутреннее устройство Windows" (книга 1, стр. 424):
0
|
Ушел с форума
|
|
18.03.2015, 09:31 | 3 |
Все верно, PEB и TEB - это юзермодные структуры.
Список модулей процесса, хранящийся в PEB, тоже размещается в user mode. На самом деле префикс еще ни о чем не говорит. В системе есть два набора Nt/Zw-функций, один пользовательский, в ntdll.dll, для вызова обычными программами (не драйверами), второй ядерный, причем в первом случае Nt- и Zw-функции - одно и то же, во втором - нет (разница в проверках безопасности). Также, как обычно. Большинство "нормальных" драйверных функций и калбэков работают на PASSIVE_LEVEL и APC_LEVEL, где страничные сбои не страшны. В других случаях драйвер может залочить нужную память, отобразить ее в в системный диапазон адресов и обращаться к ней на любом IRQL и в контексте любого процесса...
1
|
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
|
|||||||||||||||||||||
18.03.2015, 19:12 [ТС] | 4 | ||||||||||||||||||||
Подзапутался немного.
Возьмем к примеру функцию SetTimer. Лежит она в User32.dll Ищем WinDbg'ом:
2) И еще: Руссинович о префиксе Zw пишет:
заглядываем в содержимое (просто из любопытства):
0
|
Ушел с форума
|
|
18.03.2015, 19:37 | 5 |
1) SetTimer - это exported name, а Nt(Zw)UserSetTimer - так называемое internal name.
При сборке dll можно указать (в DEF-файле, например), чтобы некоторая функция имела в секции экспорта другое имя. 2) В режиме пользователя между Nt- и Zw-функциями нет никакой разницы, каждая пара указывает на одну и ту же точку входа. Да. syscall/sysenter(/int0x2e на старых системах) вызовет переход в ядро, на специальный обработчик, там он найдет адрес функции по индексу 0x5f и вызовет его. Вот там и будут все необходимые проверки и вообще вся настоящая работа SetTimer.
1
|
18.03.2015, 19:37 | |
18.03.2015, 19:37 | |
Помогаю со студенческими работами здесь
5
На какой оси находится 0 градусов в 2D? В какой НФ находится база данных? Определить в какой четвертях находится точки A и B Определить, в какой четверти находится точка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |