Сейчас на форуме: jinoweb, bartolomeo, rmn (+4 невидимых)

 eXeL@B —› Программирование —› Перехват прерываний и исключений
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
Посл.ответ Сообщение

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 09 декабря 2013 15:35
· Личное сообщение · #1

Руководствуясь Хоглундом и Батлером на тему перехват прерываний и исключений , написать и запустить драйвер получается но перехват не выходит, пытался перехватить как 0x04 OF так и 0x13 ошибки доступа к памяти, запускал на VB xp 32 с одним процессором, но увы, не опытность даёт знать, вот код на Си который вышел:

init.c:
Code:
  1. #include <ntddk.h>
  2. #include "IDT.c"
  3.  
  4. #define MAKELONG( a , b )( ( LONG ) ( ( ( USHORT ) ( a ) ) | ( ( ULONG ) ( ( USHORT ) ( b ) ) ) << 16 ) )
  5.  
  6. #define NT_SYSTEM_SERVICE_INT 0x13
  7.  
  8. ULONG RealSystemPtr;
  9.  
  10. void MyInt()
  11. {
  12.          __asm
  13.          {
  14.                  pushad
  15.                  pushfd
  16.                  push fs
  17.                  mov bx , 0x30
  18.                  mov fs , bx
  19.                  push ds
  20.                  push es
  21.          }
  22.          
  23.          DbgPrint("Is MyInt");
  24.          
  25.          __asm
  26.          {
  27.                  pop es
  28.                  pop ds
  29.                  pop fs
  30.                  popfd
  31.                  popad
  32.                  jmp RealSystemPtr;
  33.          }
  34. }
  35.  
  36. void Hook()
  37. {
  38.          IDTINFO idt_info;
  39.          IDTENTRY * idt_entries;
  40.          IDTENTRY * int2_entry;
  41.          
  42.          __asm sidt idt_info
  43.          
  44.          idt_entries = ( IDTENTRY * ) MAKELONG( idt_info.LowIDTbase , idt_info.HiIDTbase );
  45.          
  46.          RealSystemPtr = MAKELONG( idt_entries[ NT_SYSTEM_SERVICE_INT ].LowOffset ,
  47.                                                                              idt_entries[ NT_SYSTEM_SERVICE_INT ].HiOffset );
  48.                                                                                     
  49.          int2_entry = &idt_entries[ NT_SYSTEM_SERVICE_INT ];
  50.          
  51.          __asm
  52.          {
  53.                  cli
  54.                  lea eax , MyInt
  55.                  mov ebx , int2_entry
  56.                  mov [ ebx ] , ax 
  57.                  shr eax , 16
  58.                  mov [ ebx + 6 ] , ax
  59.                  sti
  60.          }
  61.  
  62. void DriverUnload( IN PDRIVER_OBJECT DriverObject );
  63.  
  64. NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject , IN PUNICODE_STRING RegPath )
  65. {
  66.          DriverObject -> DriverUnload = DriverUnload;
  67.          Hook();
  68.          return STATUS_SUCCESS;
  69. }
  70.  
  71. void DriverUnload( IN PDRIVER_OBJECT DriverObject )
  72. {
  73.          DbgPrint("Bye!\n");
  74. }


IDT.c
Code:
  1. typedef struct
  2. {
  3.          USHORT IDTLimit;
  4.          USHORT LowIDTbase;
  5.          USHORT HiIDTbase;
  6. }        IDTINFO ;
  7.  
  8. #pragma pack( push , 1 )
  9. typedef struct
  10. {
  11.          USHORT LowOffset;
  12.          USHORT selector;
  13.          UCHAR   unused_lo;
  14.          unsigned char unused_hi : 5;
  15.          unsigned char DPL : 2;
  16.          unsigned char P : 1;
  17.          USHORT HiOffset;
  18. } IDTENTRY ;
  19. #pragma pack( pop )




Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 13 января 2014 21:24 · Поправил: MickeyBlueEyes
· Личное сообщение · #2

dosprog
Да именно он.
int
А "К.Ирвин - Язык ассемблера для процессоров Intel" ?




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 13 января 2014 22:16 · Поправил: Модератор
· Личное сообщение · #3

MickeyBlueEyes

> Тута пытаюсь int 1 перехватывать, прямо из IDT, делаю такой трюк

Не будет оно работать, почему я уже расписал.

> PsGetCurrentProcess(); //БСОД

Селекторы нужно восстановить соответствующие.

Я просто поражаюсь как так можно, не думайте что какой то сарказм. Просто человек пилит ISR не имея представления про сегментацию, короче попытка работать в прот моде в р0 не зная что это такое.

int

> К сожалению действительно стоящей документации и примеров нет.

Как бы не так. Документации тонны, как оригинальной, так и косвенной/оттранслированной етц. Тоже касается и кода.

> т.е. понять куда указывают сегментные регистры в режиме ядра и какими они должны быть.

Когда я не понимал механизмов сегментации, у меня сегмент" вызывало очень не приятные ассоциации, это были впечатления связанные с досом. Вероятно у тс тоже самое, так как той же хернёй забивают разум, даже сейчас. Это заблуждение, профессор может и умный, но в данный момент он ... и ему низя верить, так как его знания устарели. Беру в пример БГУИР, беларусский вуз, личный опыт. Мне там говно впихивали, сортировки какие то в досе.. кому оно щас надо.

int

На словах нумерация происходит в десятичной системе. Я могу посчитать сдачу в магазе в бинах, но думаю продавец не осилит

Archer
> а не клеркокостыли, работающие на единственной платформе, а то и единственном билде ОС.

Может пример приведёте, так прямо и скажем чтобы не быть ... ?

Обычно мой код робит во всей линейке, вот например LWE. На WOW тоже робит. И в чём именно костыли ?

На си ты такой код никак не запилишь, только если вручную транслировать, это даже можно и не обсуждать - конпиль не под те задачи запилен. Ну а на си это реализовать маразм полнейший.

Есть некоторые коды, как например под недавний ман про клифа - так это POC. Мне нужно обьяснять что это такое ?

У меня вообще нет желания с вами спорить, у вас у всех вместе взятых уровень знаний и понимания далёк от моего. Это не моё желание, нет конечно, это просто обьективные факт. Сейчас наверно вентилятор должен разбросать говна, так как детский разум морально не устойчив..

Ну а то, что вы называете портабельностью - си в простейшем случае это примитивнейший язык, он и популярен именно за свой минимализм. Можно описать всё 3-хэтажными конструкциями, что есть приведение типов. Это его суть. Я изучил си за пару дней, причём эти дни не помню, так как был пьяный в дрова. Возмите любой мой код и подумайте как реализовать на си. Я уверен что вы ничего не ответите, так как таких попыток на том же аверлабе было много, но не одного вменяемого ответа.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 13 января 2014 22:32 · Поправил: dosprog
· Личное сообщение · #4

Dr0p,
...На словах нумерация происходит в десятичной системе.

--плохо. И не факт. Возьмите int21h,int10h,int13h,16h,int19h,25h,int33h,int35h,int52h,...int71h - всюду хекс.
В Windows в сообщениях об ошибках тоже хекс.
Tак принято. Зачем держать в памяти два набора данных, когда это те же цветы, но в профиль?
В программах (нормальных) я тоже не видел, чтобы использовали dec, потому что неудобно, да и ошибками чревато (RADIX).
Кстати, это один из издевательских способов обфускации асм-текстов - все числа в десятичной системе.

--ADD--
К сожалению (или нет), для хекс-арифметики давно уже использую калькулятор.
В уме не считаю после нескольких идиотских ошибок, стоивших времени.

P.S. Прошу извинить за оффтоп...




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 13 января 2014 22:33 · Поправил: Dr0p
· Личное сообщение · #5

dosprog

Это не я запутался, зачем меня лечить

Вы кстате как в уме с хекс математикой, дружите ?

Быть может скажите как перевести 0x4567 в дес ?




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 14 января 2014 00:09 · Поправил: Dr0p
· Личное сообщение · #6

dosprog

4-ре бита(ниблом называется) не просто так сделали отдельным понятием. Зная это числа очень просто в уме конвертятся

Ну а калькулятор заменяет мозги - это не труъ, хотя я и сам считать не люблю, так как отвлекает



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 14 января 2014 00:48
· Личное сообщение · #7

Dr0p
Си за пару дней изучить не получится. В смысле изучить синтаксис можно быстро, а вот все парадигмы языка надо курить опытным путем и изучением примеров. По поводу перевести исходники... Пару асм-файлов SIDE я уже перевел на Си, могу скинуть, если интересно. Хотя есть свои недостатки, например битовые маски в асме работают очень быстро, но без комментариев выглядят не наглядно. В сях они выглядят более наглядно, за счет битовых полей. Однако оптимизации нет, ибо нет у меня на сях прямого доступа к тем же SHRD, SHLD. Остается слепо верить, что компиль сделает более менее хороший код. Отладка усложняется, ибо на асме я вижу в отладчике свой код, а если он был написан на сях, мне еще надо пытаться разглядеть плоды компилятора. Холивар на тему языков программирования считаю глупым. Все языки хороши, каждый под свою задачу. Я развел холивар не на тему выбора языка, а на тему не понятной мне каши из разных языков в одном файле.

Преимущество языка Си я вижу только в том, что код очень лаконичным получается против ассемблера. Приведения типов - это типичный быдлокод. Оно редко надо, на самом деле, если адекватно писать.

Против десятичной системы счисления я ничего не имею. Просто ты написал 14-ый вектор, а тс написал как 0x14.

dosprog пишет:
--плохо. И не факт.

Почему это? Я мыслю обычно в десятичной системе счисления. Просто надо понимать где ставить h или 0x, а где нет. Ошибки возникают там, где нет понимания. Или от невнимательности.

Короче обсуждение ЯП и систем счисления бессмысленный холивар и к теме отношения не имеет.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 14 января 2014 13:44
· Личное сообщение · #8

int

От сайда только хидеры нужны, он юзается в виде дампа, это же мотор. На си оно в принципе не портируется, точнее после конпиляции получится фигня.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 14 января 2014 16:22
· Личное сообщение · #9

Dr0p
Фигня с точки зрения работоспособности или с точки зрения оптимизации?

Добавлено спустя 3 часа 59 минут
MickeyBlueEyes пишет:
"К.Ирвин - Язык ассемблера для процессоров Intel"

* Слишком много воды.
* Слишком много времени отведено MS-DOS. В наши дни 8086 режим нужен только чтобы запустить защищенный режим и для ntvdm.
* Построена как учебник, препод-стайл
* Слишком много вниманию макроассемблеру
* О страничной адресации не сказано почти ничего, а все потому, что это учебник, +инфа устарела, уже давно используется PAE, в книге упоминается лишь PSE-36 и то с пометкой "мы не будем его тут описывать"

Читаем авторский пролог:
"Материал данной книги подобран в соответствии с ее первоначальным замыслом —
научить студентов писать и отлаживать программы на уровне машинных кодов. Она
никогда не заменит собой полноценный учебник по архитектуре компьютеров
, но
позволит студентам получить из первых рук бесценный опыт в написании программ и
продемонстрирует, как на самом деле работает компьютер."

Старая избитая ложь, копируемая авторами из книги в книгу (собственно так большинство учебников пишется: лектор берет книгу по которой учился сам, меняет текст определений, добавляет немного новых материалов и издает под своим именем; этим страдает даже МГУ). Что-то не фига я не знал, как работает компьютер (и сейчас не знаю, но что-то все-таки уже знаю), пока не полез изучать тонкости защищенного режима.

По архитектурам ОС есть книги Таненбаума. Но там тоже воды до фига.

В итоге документацией является то, о чем я сказал. Маны Интела/АМД и исходники винды. Если кто-то знает другие хорошие примеры, было бы интересно обсудить. Вот, например, как заполняются сегментные регистры в коде из WRK:
Code:
  1.     pProcessorState->ContextFrame.SegCs = KGDT_R0_CODE;
  2.     pProcessorState->ContextFrame.SegDs = KGDT_R3_DATA;
  3.     pProcessorState->ContextFrame.SegEs = KGDT_R3_DATA;
  4.     pProcessorState->ContextFrame.SegFs = KGDT_R0_PCR;
  5.     pProcessorState->ContextFrame.SegSs = KGDT_R0_DATA;

Взято отсюда. Только не надо это на веру принимать как есть. Но вот в fs обязан быть KGDT_R0_PCR, на этой структуре очень много функций завязано. Остальные регистры завязаны на то, куда вы хотите обращаться. ds и es настраиваются на KGDT_R3_DATA. cs (берется из GDT, шлюзы прерываний и исключений) и ss (стэк всегда соответствует CPL) переключаются процессором. gs вроде бы вообще только в 64-битной винде нужен.

| Сообщение посчитали полезным: Dr0p


Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 14 января 2014 21:47 · Поправил: Dr0p
· Личное сообщение · #10

int

> Фигня с точки зрения работоспособности или с точки зрения оптимизации?

Вроде же када пивас пили я вам растёр этот вопрос подробно. Зачем опять спрашивать. Сайда тело есть микод

> Но вот в fs обязан быть KGDT_R0_PCR

Это всё фундаментально, но думаю вы зря это пишите, так как для тс это некий непонятный язык/образы.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 14 января 2014 21:56
· Личное сообщение · #11

Dr0p пишет:
Сайда тело есть микод

Я не драйвер ковыряю, библиотеку.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 14 января 2014 22:11
· Личное сообщение · #12

int

Основная часть фильтра(дллка) не портабельна, так как используются конструкции типо загрузки флагов и далее восстановления регистров, при этом учитывается TF etc. Изменение кода приведёт к не работоспособности. В общем часть, которая является непосредственно фильтром не может быть транслирована на си. На нём походу можно хорошо фильтры сервисов описывать. Описание апи - отложенная маршрутизация также будет извратом, так как используются текущие регистры.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 14 января 2014 22:21
· Личное сообщение · #13

Dr0p пишет:
используются конструкции типо загрузки флагов и далее восстановления регистров

Дык к ним прямой доступ есть через интринсики. Еще можно оптимизацию вырубить, если работоспособность ломается. Смысла особого нет вообще в этом, просто мне таким образом проще разобраться.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 14 января 2014 22:26
· Личное сообщение · #14

int

Не могу ничего сказать по поводу инлайн макро(интринсики эти самые). Не нравится мне это, хотя это чисто моё мнение, возможно не корректное.

Думаю это могут реализоать лишь те, кто полностью конпиль разобрал и знает во что будет каждое выражение сконпилено. Я например понятия не имею. Видимо поэтому и не нравится.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 января 2014 06:27
· Личное сообщение · #15

int пишет:
ss (стэк всегда соответствует CPL)

Если быть совсем точным, то это CPL всегда соответствует стеку. Иными словами, текущие привилегии процессора всегда соответствуют полю DPL в теневом регистре SS. При этом SS.CPL и CS.CPL могут (теоретически) быть другими, т.е. вполне допустима ситуация когда SS.CPL = CS.CPL = 0, а фактически проц работает в ринг3. Об этом писал еще Коллинз 15 лет назад. Правда стандартными методами добиться рассинхронизации ShadowSS.DPL с SS.CPL и CS.CPL невозможно (или я просто не знаю как).
На современных процах единственный путь - это залезть в SMM и в образах теневых регистров, сохраненных в SMRAM Save State Map, поменять DPL на нужное значение. На древних 286 и 386 для этой цели можно было еще заюзать команду loadall.
P.S. Проверял только в native mode, насчет лонгмода, когда в SS запросто может быть нулл-селектор - хз.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 15 января 2014 08:21 · Поправил: dosprog
· Личное сообщение · #16

spinz,
...CS.CPL = 0, а фактически проц работает в ринг3.
- это проверено?)))

Проверка SS.CPL==CS.CPL выполняется во время загузки SS, а не CS.


--ADD--
К следующему посту:
...пытался выполнить любую привилегированную команду...
--какое значение (число) у вас при этом было в регистре CS?

И в любом случае:
1) при загрузке в SS значения с CPL<>CS.CPL будет неприятность.
2) при загрузке в SS (и СS) значений 0..3 - то же самое
3) при использовании в SS селектора дескриптора сегмента данных - то же самое.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 января 2014 08:37
· Личное сообщение · #17

Проверено. Я вызывал SMI из ринг 0, через cache poisoning хучил обработчик SMI#, менял в образе shadow SS DPL на 3 и выполнял RSM. Потом пытался выполнить любую привилегированную команду, в рез-те GP#, т.е фактически проц был в ринг3, хотя SS.CPL=CS.CPL=0. Еще раз повторю, что все делалось в обычном 32битном протмоде.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 16 января 2014 01:23
· Личное сообщение · #18

Господа извиняюсь что я перебиваю, но после прочтения некоторых постов, меня всё больше осинило, мне некий код драйвер в том числе перехват int 1, нужно будет на x64, но как я понимаю там патч гвард, так шо там мне ничего не светит. Я незнаю как там всё точно, но можна же както подключится типо своим отладчиком и отлаживать свои DR через kernel mode легально и без патча IDT? Хотябы подскажите ключевый слова для поиска в гугле ) Мат часть понимаете хромает




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 16 января 2014 01:28 · Поправил: Dr0p
· Личное сообщение · #19

MickeyBlueEyes

> Хотябы подскажите ключевый слова

Маршрутизация. И не обращайте внимания на их заумные тексты. В реале под нт на это можно забить, так как они вещают то, чего в реале не потрогали. Я например пытался поюзать тсс и ничо не получилось. Сугубо по матчасте.

Реальные задачи этого не требуют. Тёрки про теневые части регистров следует на аверлабе обсуждать, просто там люди есть которые знают теорию хорошо(не сходящуюся частично с реальностью).



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 16 января 2014 01:31
· Личное сообщение · #20

Сложно но попробуем.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 16 января 2014 01:36 · Поправил: Dr0p
· Личное сообщение · #21

spinz

> SMI#

Ну и нахера и как ты етот сигнал сгенерил если не секрет ?

> На современных процах единственный путь - это залезть в SMM

Я не понял, к чему путь ?

ТС нужно фолты обрабатывать, о чём вы говорите. Наркоман чтоле ?



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 16 января 2014 06:28
· Личное сообщение · #22

dosprog пишет:
--какое значение (число) у вас при этом было в регистре CS?
И в любом случае:
1) при загрузке в SS значения с CPL<>CS.CPL будет неприятность.
2) при загрузке в SS (и СS) значений 0..3 - то же самое
3) при использовании в SS селектора дескриптора сегмента данных - то же самое.

Емнип CS=0x500. За следущее замечание - спасибо, привет от КО )) Правда не понял насчет "SS селектора дескриптора сегмента данных" - по твоему там должен быть дескриптор кодового сегемента что ли?
Dr0p пишет:
как ты етот сигнал сгенерил если не секрет

Грустно, когда илита илит, которая везде орет про свое доскональное знание матчастей и обязательность изучения интеловских манов всем одептам, так фейлит. В главе про Local APIC все описано.
Dr0p пишет:
Я не понял, к чему путь

К рассинхронизации shadow.DPL и CPL. Видимо одинаково "внимательное" чтение чужих постов и мануалов и стало причиной вышеупомянутого фейла




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 16 января 2014 09:36
· Личное сообщение · #23

Аппаратная виртуализация поможет перехватить прерывания, не мешая патчгарду.
К слову сказать, в виртуализации амд есть отдельно CS, а есть отдельно CPL. Вероятно, их можно рассинхронизивать, но не пробовал. В интеле такого разделения нет.

| Сообщение посчитали полезным: MickeyBlueEyes

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 16 января 2014 15:47
· Личное сообщение · #24

Мощь, как я не наткнулся на это.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 19 января 2014 22:03
· Личное сообщение · #25

Есть способы узнать прямо в обработчике прерываний в каком мы векторе? Ну тоесть чтобы не подставлять при перехвате всем одно и тоже тело заголовка и конца, а сделать один трап для всех, чтобы заполнял все сегменты, потом узнавал в каком мы векторе и из массива хуков использовал вектор в качестве индекса.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 января 2014 10:37
· Личное сообщение · #26

MickeyBlueEyes
В чем проблема открыть наконец мануал? Если проблемы с английским, у меня есть перевод 6-ой главы. Не выкладываю, т.к. еще не успел доделать.

Вы знаете, что такой класс исключений? Можете назвать отличие в обработчиках отказов (faults в оригинале) и ловушек? Вы понимаете, что будет в стеке в каждом конкретном случае? Там бывает код ошибки, который IRET не выталкивает из стека. Догадываетесь, чем дело кончится? А что сохраняется кроме кода ошибки? Без ответа на эти вопросы, ваши вопросы не имеют смысла. Я понимаю, что вы не смогли сегментные регистры настроить на селекторы винды (KPCR в смысле хотя бы). Тема мало где раскрыта, чтобы тут не писали (драйвер Archer'а с хуком IDT рассмотрен в соседней теме, он конечно сейчас может написать лучше, но с фактом некорректности того кода нельзя не согласиться, а ведь это тоже опыт). Но все же ман Интела, изучить придется.

Вот, что вам надо открыть (официальная книга Intel):
64-ia-32-architectures-software-developer-manual-325462.pdf
Поверю, что вы открыли эту книгу, только если назовете мне хотя бы одну ошибку в тексте этой PDF. Да, чтение это скучно и нудно, не так весело чем писать код. Однако, смысла в таком коде не будет, и вам все равно надоест.

| Сообщение посчитали полезным: MickeyBlueEyes, _0d0a

Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 20 января 2014 12:46
· Личное сообщение · #27

MickeyBlueEyes пишет:
Есть способы узнать прямо в обработчике прерываний в каком мы векторе?

Без лишних телодвижений вроде нельзя. А если все (кроме #NP) дескрипторы IDT пометить как Not present, то в обработчике #NP, анализируя код ошибки, можно определить какой эксепшн должен был бы вызваться (будь его дескриптор Present). Только вряд ли это будет стабильно работать, например в случае фактического double fault мы получим в итоге triple fault (дескриптор даблфолта ведь невалиден)



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 января 2014 13:00
· Личное сообщение · #28

spinz
Ну еще можно придумать массу способов типа проверок Eip и кода ошибки (если есть). Можно определить int 3 и int3. Можно определить into и bound. Но это ненадежно. И главное зачем? Автор просто хочет упростить код, видимо, вам же больше интересна теоретическая часть вопроса.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 20 января 2014 13:23
· Личное сообщение · #29

Как я понял, идея автора заключалась в том, чтобы сделать единую точку входа для всех прерываний, потом неким образом определять номер вызванного прерывания(эксепшна) и затем вызывать нужный обработчик. Так действительно код был бы немного компактней, только вот определить искомый номер практически невозможно без извращений с дескрипторными таблицами

| Сообщение посчитали полезным: MickeyBlueEyes

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 20 января 2014 18:42
· Личное сообщение · #30

Да,именно это я и хотел сделать.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 20 января 2014 19:19
· Личное сообщение · #31

Int
В чем проблема открыть наконец мануал? Если проблемы с английским, у меня есть перевод 6-ой главы. Не выкладываю, т.к. еще не успел доделать.

Да нету проблем, ман читаем, хоть и английский не на высоком уровне. Просто не добирался к нему ещё, а так вот 6 главу открыл всётаки щас читаю.


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
 eXeL@B —› Программирование —› Перехват прерываний и исключений
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати