|
|
| Посл.отвђт | Сообщен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 |