
روابط Python لـ BochsCPU
روابط Python لمشروع BochsCPU الخاص بـ @yrp باستخدام FFI لمحاكاة كود x86 بسهولة ودقة.
يتطلب 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)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 من جذر المشروع:فقط قم باستيراد وحدة bochscpu ودع المتعة تبدأ! ستعمل حزمة التثبيت أيضاً على تثبيت ملفات الواجهة، مما يسمح لبيئات التطوير الحديثة (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) للوضع الحقيقي، وتعبئة الخطافات (hooks) مسبقاً باستدعاءات أساسية (لا تقوم إلا بـ 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() الخاصة بـ Glibc لنظام لينكس على x64
https://github.com/hugsy/bochscpu-python/assets/590234/2486adbc-0878-46f5-83ed-3bcf9774fd26