
Python-привязки для BochsCPU
bochscpu-python требует только окружение Python 3.8 или новее.
Самый простой способ запустить всё — использовать стабильную упакованную версию на PyPI
python -m pip install bochscpu-python
Скачайте последний рабочий артефакт со вкладки GitHub Actions репозитория. Распакуйте ZIP-файл и установите .whl-файл из папки wheel.
python -m pip install wheel/bochscpu-$version-$os-$arch.whl
Довольно просто:
python -m pip install .
Или без клонирования
python -m pip install git+https://github.com/hugsy/bochscpu-python.git#egg=bochscpu-python
Обратите внимание, что этот подход потребует установки всех необходимых инструментов сборки (описано ниже)
cmakepipcl для Windows, clang++ для macOS и g++ для Linux)*.lib в bochscpu/lib/<BuildType> (где BuildType может быть Debug, Release, RelWithDebInfo и т.д.)python -m pip install -r requirements.txtcmake
Это создаст файл bochscpu pyd (и его PDB), который можно импортировать из сессии Python с помощью import bochscpu..whl из корня проекта:python -m pip wheel .
Просто импортируйте модуль bochscpu — и вперёд! Установка пакета также установит файлы интерфейсов, что позволит современным IDE (VSCode, PyCharm и т.д.) предлагать полезные автодополнения.
Очень простой шаблон можно составить так:
import bochscpu, bochscpu.utils, bochscpu.cpu
sess = bochscpu.Session()
sess.missing_page_handler = bochscpu.utils.callbacks.missing_page_cb
state = bochscpu.State()
bochscpu.cpu.set_real_mode(state)
hook = bochscpu.Hook()
bochscpu.utils.callbacks.install_default_callbacks(hook)
sess.run([hook,])
Это создаст сессию bochscpu, установит состояние ЦП для реального режима и заполнит хуки базовыми колбэками (которые при выполнении лишь вызывают print). Обратите внимание, что этот пример ничего не сделает, поскольку мы не выделили страницы кода и не настроили регистры, указывающие на него.
Более полный шаблон можно найти в examples/
https://github.com/hugsy/bochscpu-python/assets/590234/adc5ac5a-a8eb-4982-9537-5ece3f32f8f8
print("hello world"), в 16-битном реальном режиме
https://github.com/hugsy/bochscpu-python/assets/590234/eb06af06-4b10-490e-ae40-a1d0aed333ca
rand() из Linux Glibc на x64
https://github.com/hugsy/bochscpu-python/assets/590234/2486adbc-0878-46f5-83ed-3bcf9774fd26