
BochsCPU용 Python 바인딩
@yrp님의 BochsCPU를 위한 Python 바인딩으로, FFI를 사용해 x86 코드를 쉽고 정확하게 에뮬레이션합니다.
bochscpu-python은 Python 3.8 이상의 환경만 필요합니다.
가장 간단하게 실행하는 방법은 PyPI에서 안정적인 패키지 버전을 사용하는 것입니다.
python -m pip install bochscpu-python
저장소의 Github Actions 탭에서 최신 작업 산출물(artifact)을 다운로드하세요. 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로 빌드하세요.
이 과정은 Python 세션에서 import bochscpu로 가져올 수 있는 bochscpu pyd 파일(및 해당 PDB)을 생성합니다..whl 파일을 생성할 수도 있습니다:python -m pip wheel .
bochscpu 모듈을 import하기만 하면 재미가 시작됩니다! 패키지를 설치하면 인터페이스 파일도 함께 설치되어 최신 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