
Python bindings for BochsCPU
Bindings de Python para el BochsCPU de @yrp usando FFI para emular código x86 de forma fácil y precisa.
bochscpu-python solo requiere un entorno de Python 3.8 o más reciente.
Con diferencia, la forma más sencilla de ponerlo en marcha es usar la versión estable empaquetada en PyPI
python -m pip install bochscpu-python
Descargue el último artefacto funcional desde la pestaña GitHub Actions del repositorio. Extraiga el archivo ZIP e instale el archivo .whl que encontrará dentro de la carpeta wheel.
python -m pip install wheel/bochscpu-$version-$os-$arch.whl
Bastante sencillo:
python -m pip install .
O sin clonar
python -m pip install git+https://github.com/hugsy/bochscpu-python.git#egg=bochscpu-python
Tenga en cuenta que este método requerirá tener instaladas todas las herramientas de compilación necesarias (como se describe a continuación)
cmakepipcl para Windows, clang++ para macOS y g++ para Linux)build*.lib a bochscpu/lib/<BuildType> (donde BuildType puede ser Debug, Release, RelWithDebInfo, etc.)python -m pip install -r requirements.txtcmake
Esto generará el archivo pyd de bochscpu (y su PDB) que podrá importar desde una sesión de Python con import bochscpu..whl desde la raíz del proyecto:python -m pip wheel .
Simplemente importe el módulo bochscpu y ¡que comience la diversión! Instalar el paquete también instalará archivos de interfaz, lo que permitirá a los IDE modernos (VSCode, PyCharm, etc.) ofrecer un autocompletado útil.
Se puede crear una plantilla muy básica así:
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,])
Esto creará una sesión de bochscpu, establecerá el estado de la CPU en modo real y precargará los hooks con callbacks básicos (que solo realizan un print al ejecutarse). Tenga en cuenta que este ejemplo en realidad no hará nada, ya que no hemos asignado páginas de código ni configurado correctamente los registros para que apunten a él.
Se puede encontrar una plantilla más completa en la carpeta examples/
https://github.com/hugsy/bochscpu-python/assets/590234/adc5ac5a-a8eb-4982-9537-5ece3f32f8f8
print("hello world") en modo real de 16 bits
https://github.com/hugsy/bochscpu-python/assets/590234/eb06af06-4b10-490e-ae40-a1d0aed333ca
rand() de Linux Glibc en x64
https://github.com/hugsy/bochscpu-python/assets/590234/2486adbc-0878-46f5-83ed-3bcf9774fd26