· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› алгоритм ядра windows

Посл.отвђт Сообщенiе


Дата: Сен 4, 2003 21:06:34

Правильно ли я понимаю, что срабатывание таймера в Windows приводит к следующему:
1. Во внутренних "структурах ядра" Windows cохраняется контекст (регистры из стека) выполнявшегося поток.
2. Затем стек потока срезается ,- "убераются" регистры сохраненные вследствии срабатывания прерывания.
3. Делее работает менеджер потоков, который выясняет требуется ли передавать управление другому потоку ,- если "да", то из "структур ядра" относящихся к соответсвующему потоку считывается контекст (значения регистров) и загружается в регистры. Затем дальним переходом управление передается названному потоку.

Меня интересует суть :
- что из прерывания управление возвращается не по ret , а по call ?
- система windows не использует аппаратно сохраняемый контекст ?
- как отличается работа ядра linux в этом же плане ?

Не могли бы подсказать : какое прерывание имеет таймер в системе windows, чтобы ,поставив бряк в Софт-Айсе, можно было посмотреть код обработчика.


Дата: Сен 6, 2003 12:50:01 · Поправил: Four-F

Запускаешь Symbol Retriever (входит в комлект Driver Studio/Suite), просишь его слить тебе символы для hal.dll.
Перед этим ставишь галки "Translate To NMS After Download" и "Load symbols into SoftICE" или потом вручную конвертишь *.pdb в *.nms с помощью SoftICE\nmsym.exe и грузишь в айс Symbol Loader'ом.

После того как символы для HAL загружены просто набираешь в айсе idt и ишешь там _HalpClockInterrupt это и есть оно.
Ставишь на него бряку bpint xx. Это прерывание перезжает, поэтому сказать точно какое оно по номеру в твоей системе нельзя. Для этого вся эта байда и нужна. У меня под ХР на 30h сидит.
:idt
Int   Type     Sel:Offset     Attributes Symbol/Owner
IDTbase=8003F400  Limit=07FF
. . .
002D  IntG32   0008:F8725CF2  DPL=3  P   DbgMsg!.text+09F2
002E  IntG32   0008:804D4DCD  DPL=3  P   ntoskrnl!KeInitializeInterrupt+09B8
002F  IntG32   0008:804D7D50  DPL=0  P   ntoskrnl!Kei386EoiHelper+2696
0030  IntG32   0008:806BB6E4  DPL=0  P   _HalpClockInterrupt
0031  IntG32   0008:FFBCD044  DPL=0  P
0032  IntG32   0008:804D44C4  DPL=0  P   ntoskrnl!KeInitializeInterrupt+00AF


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069