
Python bindings for BochsCPU
Python 绑定,用于 @yrp 的 BochsCPU,通过 FFI 轻松且精确地模拟 x86 代码。
bochscpu-python 仅需要 Python 3.8 或更高版本的环境。
到目前为止,最简单的上手方式是使用 PyPI 上的稳定打包版本。
python -m pip install bochscpu-python
从仓库的 GitHub Actions 标签页下载最新的可用构建产物。解压 ZIP 文件,安装 wheel 文件夹中的 .whl 文件。
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、macOS 的 clang++ 和 Linux 的 g++ 上测试)build GitHub Actions 下载*.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 会话,将 CPU 状态设置为实模式,并预先用基本回调填充钩子(这些回调仅在执行时执行 print)。请注意,这个示例实际上什么也不会做,因为我们尚未分配代码页,也没有正确设置寄存器来指向它。
更完整的模板可以在examples/ 文件夹中找到。
https://github.com/hugsy/bochscpu-python/assets/590234/adc5ac5a-a8eb-4982-9537-5ece3f32f8f8
print("hello world") 的汇编代码
https://github.com/hugsy/bochscpu-python/assets/590234/eb06af06-4b10-490e-ae40-a1d0aed333ca
rand() 函数
https://github.com/hugsy/bochscpu-python/assets/590234/2486adbc-0878-46f5-83ed-3bcf9774fd26