OS-реализация через менеджер

Тема в разделе "WASM.NT.KERNEL", создана пользователем Paguo_86PK, 14 июн 2008.

  1. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Модель своей OS я реализовал как простейщий эмулятор x86 путём интерпретирования машинного кода. Это очень просто, хорошо защищает от сбоев, но и имеет черепаший ход. Словом, топорная работа.
    Существует ли документация по написанию собственных менеджеров памятии для реализации "тонкого механизма" обработчиков исключений в среде Windows, чтобы код работал в изолированном от среды Windows пространстве, а все исключения обрабатывались только моим менеджером? Т.е. подобие DOS-Box'a, но на уровне встроенных механизмов, словно VDM-32, а не медленным разбором каждой инструкции.
    К примеру, функцией CreateProcess создать полностью изолированный от Виндовс процесс и все исключения, которые он вызывает, обрабатывать собственным диспетчером.
    Спасибо!
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В виндах можно использовать механизм SEH-фреймов, но конечно GP, UD и т.п. перехватить с его помощью не получится. Хотя слышал, что есть эмуляторы, которые эмулируют не каждую инструкцию, а запускают отдельные участки эмулируемого кода. Здесь следует копать в сторону перехвата обработчиков исключений в режиме ядра, т.е. в драйверах. Есть еще технология аппаратной виртуализации VT, но ее поддерживают далеко не все процессоры.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    какого рода события ты хочешь ловить?
     
  4. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    А какая связь между модель OS и виртуальной машиной
     
  5. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Условно я называю это как OS, хотя на деле же - это часть оболочки программы, в которой можно описывать графические сцены или звуковые эффекты. Первоначально задумывал её как скриптовый язык. Но, сложности с разработкой синтаксиса и парсированием вынудили отказаться от скриптовой модели и переложить всё на уже готовый аппаратный парсер - сам процессор.
    Возмём пример MenuetOS-API и немного изменим концепцию:
    Код (Text):
    1. ; MenuetOS example
    2.     mov eax,1   ; Putpixel
    3.     mov ebx,X   ; X-position
    4.     mov ecx,Y   ; Y-position
    5.     mov edx,Color   ; Pixel color
    6.     int 0x40    ; PutPixel()
    7. ; My-self-OS variant
    8.     mov es,hWinDC   ; Window handle
    9.     stosd       ; edi=Y*65536+X; eax=Color
    Т.е. системный вызов оформлен как исключение. Коротко и просто. Нужно лишь скрыть от приложения все Win-API и всё, обрабатывая лишь исключения, чтобы любой сбой или вирусное заражение код в принципе не смог сделать! Скрипт - есть скрипт. Вроде бы просто, но никак не найду нужную документацию, как это сделать. Своеобразная модель VDM короче, со своими портами и памятью...
     
  6. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Через исключение может быть коротко и просто, но только не для ОС. Тормоза будут еще те. Да и полностью от возникновения ошибок ты таким образом не убережешься. Я бы на твоем месте все-таки разработал какой-нибудь байт-код, в который бы компилировались скрипты, но попытался бы избавиться от примитивных операций типа работы с отдельной точкой в пользу работы с целой фигурой или хотябы массивом точек, т.е. сделал бы что-то вроде макроязыка.
     
  7. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Да, даже если будут тормоза - не страшно.
    Во-первых, я учусь... Поэтому в моих интересах сейчас взять процесс под полный контроль. Т.е. перекрыть ему доступ к API-памяти и обрабатывать все исключения. Тем самым, научиться создавать собственное виртуальное пространство.
    Во-вторых, пример с выводом пиксела - грубый пример. На деле же всё намного сложнее и организованнее, по большей части процесс вырабатывает уйму исключений при инициации. Затем, основной цикл работает замкнуто, лишь периодически вырабатывая исключениее. Скажем, фильтр VirtualDub, 99% процессорного времени которого - обработка массива изображения и в конце инструкция HLT для передачи результата.
    В-третьих, каким бы образом процесс ни обращался к выделенному ему адресному пространству, ошибки быть не может, так как подкачка страниц обрабатываться должна моим менеджеров, а обращения к системным функциям - отсутствует, так как процесс в первую очередь - обработчик массивов и Win-API ему не нужны и не доступны.
    Проще говоря, программа-пример есть и работает в побайтовом парсере машинного кода. Мне нужно лишь исключить из диспетчера сам эмулятор x86 и переключиться на обработку исключений, что повысит скорость и упростит сам диспетчер.
    А вот от скриптов, как сказал уже, мне пришлось отказаться. Байт-код тоже есть... Но меня интересует, как сказал выше, сам механизм обработки исключений...
    Спасибо!
     
  8. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Как мне дали понять, подобные механизмы - коммерческая тайна многих производителей антивирусов и пр...
    Всем Спасибо!
    Тема закрыта.
     
  9. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    разве что статьи по защищенному режиму

    а что-то мешает, получить контроль над IDT, да и прооцесором вобще?

    Почти аналогичная задача, реализована в "ускорительном" дрове KQEMU
    Код (Text):
    1.         movl KQEMU_STATE_monitor_cr3(%ebx), %eax
    2.         movl KQEMU_STATE_monitor_data_vaddr(%ebx), %ebx
    3.         movl %eax, %cr3
    4.         movl %ecx, %cr4
    5.                  
    6.         lidt KQEMU_STATE_monitor_idt(%ebx)
    7.         lgdt KQEMU_STATE_monitor_gdt(%ebx)
    8.  
    9.         ljmp *KQEMU_STATE_monitor_jmp(%ebx)
    10. ASM_NAME(kernel2monitor_jmp_offset):
    по-сути ОСь над ОСь-ю, без всяких байткодов и скриптов.