Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1

Супервизор над памятью/портами процессора

12.11.2019, 22:59. Показов 1078. Ответов 2

Студворк — интернет-сервис помощи студентам
В планируемом интернет-сервисе пользователи могут загружать из десятков x86-инструкций собственные файлы "ботов".
Никакого анализа на содержание в нём вирусов/троянов проводиться не будет, так как весь код онлайн должен и редактироваться на стороне клиента, и заливаться на сервер в реальном масштабе времени. То есть, код - просто дамп без заголовка.

И никaк не получается выгуглить даже простой пример по теме.
Так как выходят ссылки про периферийные последовательные COMx-порты.

Задача состоит примерно в следующем:
Мне необходимо (в качестве эксперимента) сделать подобие эмулятора/песочницы, чтобы из файла загружать короткий код (не .exe, а именно .com) из пары десятков команд и передавать ему управление.
Фишка в том, что эмулировать его своими средствами слишком долго (в 2008 написал эмулятор i8086, но он был медленным очень) и не хочется в свою программу встраивать эмулятор вообще, так как защищённый режим - на то и придумали в i386, чтобы сам процессор всё делал.

Условия заключаются в том, чтобы указатель инструкций EIP мог начинаться с 0x00000000 по 0xFFFF0000 рандомно. Как и регистры сегментов cs/ds/es/fs/gs/ss должны иметь произвольные значения для каждого "бота". И пользователь в этом должен быть уверен. Как можете уже понимать, никакого доступа к системному API через call/int не предусматривается и не должно быть в принципе. Должна быть полная инкапсуляция.
Однако, взаимодействие между разными "ботами" (пользователями) должно происходить на уровне портов ввода-вывода. То есть, через инструкции in/out-процессора и rep-циклы ins/outs производится обмен информацией между ботами разных пользователей, где в dx - не индекс реального порта компьютера, а индекс бота.
Инструкции int-процессора также не вызывают никакого API, а просто изменяют скорость работы "бота".
Более того, EIP разных "ботов" и их сегментные регистры могут полностью совпадать, хотя код и разный.

Грубо говоря, допустим, имеются 65536 ботов клеточного автомата.
Каждый бот описывается кодом не скриптовым языком, типа Lua/Squirrel, а машинным кодом.
Собственно, каждый бот - и есть виртуальный порт, с которым обмениваться можно через in/out-инструкции процессора.
И мне надо это дело полностью инкапсулировать.
Индекс портов может быть произвольным и рандомным. Мне просто необходимо построить граф связей между ботами через порты. И желательно (в этот раз) без эмуляции. Просто как-то настроить контекст процессора.

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

Как я понимаю, мне нужно практически виртуализировать PC.
Многие советуют просто изучать исходники Qemu/Bochs, так как не совсем вникают в поставленную задачу.
А задача, в принципе, проста и заключается в том, что каждый из "ботов" работает в своём голом (без API) адресном пространстве и порты ввода-вывода - это просто "соседние боты", соседние процессы.
Подобие нейронной сети.

P.S.: Можно ли в среде Windows это организовать?
Где найти информацию подробнее с примерами?
Раннее я никогда не обрабатывал исключения и не раскручивал стек.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2019, 22:59
Ответы с готовыми решениями:

Разница между выделенной памятью и общей памятью графического процессора?
Здравствуйте! Купил и установил себе видеокарту GTX 1060 6Gb. При просмотре её производительности обратил внимание что на её памяти есть 2...

Почему РОН называют сверхоперативной памятью процессора?
Почему РОН называют сверхоперативной памятью процессора?

Преимущества Адресного пространства(виртуальной памяти) над физической памятью
Вечер добрый) Читаю Таненбаума, отвечаю на вопросы. Вопрос звучит так: "В современных ОС адресное пространство процесса отделено от...

2
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
13.11.2019, 00:40
Цитата Сообщение от Alikberov Посмотреть сообщение
мне нужно найти в сети пример простого отладчика, который загружал бы чужой пользовательский код неизвестного содержания
так то исходники x64Dbg можно посмотреть на гитхабе, но ваша задача не сводится только на отладчике, учитывая I/O порты.
на том же гитхабе можно найти много реализаций гипервизоров, вот например https://github.com/Kelvinhack/kHypervisor
1
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
14.11.2019, 12:55  [ТС]
https://github.com/Kelvinhack/... nvironment - VMware 12 with EPT environment.
Смущаeт меня то, что, по-видимому, всё это заточено под работу в комплексе с VMware.
VMware у меня установлен. Но мне необходим, по возможности, самостоятельный код.

Например,
http://board.kolibrios.org/viewtopic.php?f=9&t=426 - вот здесь, в частности, например,
можно было найти исходники эмуляции KolibriOS, который не был эмулятором в прямом смысле, а был тем самым гипервизором. Например, через префикс gs: копировал снимок экрана и предоставлял доступ к его пикселям. При этом никаких сторонних программ не требовалось.

Проблема в том, что я долго изучал исходный код, а он весь на ассемблере. Ассемблером я владею 20 лет под "написать самому". А вот разобраться в кем-то написанном коде под десяток тысяч строк - не смог.
По-сути, для запуска KolibriOS-приложений достаточно обеспечить API по int 0x40.

В моём случае нужно добиться несколько иного:
Все int'ы от 0x00 по 0xFF задействовать под настройку скорости работы таймера.
Все порты от 0x0000 по 0xFFFF задействовать под обмен с другими подобными потоками.
Всё адресное пространство с 0x00000000 по 0xFFFFFFFF "зеркалами" свернуть до 16 Мб. То есть, 0x12345678 тот же вектор, что и 0x00345678 или 0xFF345678, чтобы код пользователя получал в своё распоряжение все 4 Гб адресного пространства, но свёрнутого до 16 Мб через неполную дешифрацию зазеркаливанием.

Как Вы понимаете, в такой среде, любые исключения, хоть даже и произойдут, но они не должны быть критическими. Нужно для каждого пользовательского кода создать обстановку, будто он работает на "голом" процессоре без BIOS и с 16 Мб памяти, а вместо периферии через порты ввода-вывода идёт обмен с другими процессорами.

То есть, абсолютно ничего эмулировать не нужно.
Лишь скрыть WinAPI, скрыть физические порты, свернуть и зазеркалить память.
Судя из мануалов Intel нужно настроить сегменты и есть пример смещения графической памяти.
А под Windows всё это не получалось никак добиться.

Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2019, 12:55
Помогаю со студенческими работами здесь

При покупке нового процессора не запускается со старой памятью
В общем такая ситуация: заказал процессор Xeon E5430, до этого стоял Core 2duo E6600. Встал нормально. Стояло 3 планки по 2гб озу DDR2, и...

Совместимость процессора AM3 на сокете AM2+ с памятью DDR2 2G 1066 Mhz
Добрый день. Интересуюсь вот таким вопросом: Комплектация компа: 1. Мать ASUSTek M3A78-CM AM2+ AMD780V/RV610 DDR2 RAID 7.1 DisplayP...

Супервизор не запускает
Всем привет. Прошу помощи так как не знаю как реализовать. Есть код который запускает процесс cd acey node . Хочу запустить его в...

супервизор какой купить
что такое простыми словами супервизор и какой мне прикупить для работы с пиками и стм32?то есть на какой номинал там и тп?

Помогите побороть супервизор
В этой схеме http://imbiddid.it-mind.poltava.ua/sch.jpg Проблема заключается в следующем, при включении схемы без акума,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru