
Bindings Python para BochsCPU
De longe, a maneira mais simples de colocar tudo em funcionamento é usar a versão empacotada estável no PyPI
python -m pip install bochscpu-python
Baixe o artefato funcional mais recente na aba de Github Actions do repositório. Extraia o arquivo ZIP e instale o arquivo .whl que você encontrará dentro da pasta wheel.
python -m pip install wheel/bochscpu-$version-$os-$arch.whl
Bem simples:
python -m pip install .
Ou sem clonar
python -m pip install git+https://github.com/hugsy/bochscpu-python.git#egg=bochscpu-python
Observe que essa abordagem exigirá que você tenha todas as ferramentas de compilação necessárias instaladas (conforme descrito abaixo)
cmakepipcl no Windows, clang++ no MacOS e g++ no Linux)build*.lib para bochscpu/lib/<BuildType> (onde BuildType pode ser Debug, Release, RelWithDebInfo, etc.)python -m pip install -r requirements.txtcmake
Isso gerará o arquivo pyd do bochscpu (e seu PDB) que você pode importar de uma sessão Python com import bochscpu..whl a partir da raiz do projeto:python -m pip wheel .
Basta importar o módulo bochscpu e deixe a diversão começar! A instalação do pacote também instalará arquivos de interface, permitindo que IDEs modernas (VSCode, PyCharm, etc.) ofereçam preenchimento útil.
Um modelo bastante simples pode ser feito assim:
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,])
Isso criará uma sessão bochscpu, definirá o estado da CPU para o modo real e pré-populará os hooks com callbacks básicos (que apenas executam um print quando são acionados). Observe que este exemplo não fará nada na prática, pois não alocamos páginas de código nem configuramos corretamente os registradores para apontar para elas.
Um modelo mais completo pode ser encontrado na pasta examples/
https://github.com/hugsy/bochscpu-python/assets/590234/adc5ac5a-a8eb-4982-9537-5ece3f32f8f8
print("hello world") no modo real de 16 bits
https://github.com/hugsy/bochscpu-python/assets/590234/eb06af06-4b10-490e-ae40-a1d0aed333ca
rand() da Glibc do Linux em x64
https://github.com/hugsy/bochscpu-python/assets/590234/2486adbc-0878-46f5-83ed-3bcf9774fd26