
Python bindings for BochsCPU
@yrp के BochsCPU के लिए Python बाइंडिंग्स, जो 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) जनरेट करेगा, जिसे आप import bochscpu के साथ Python सेशन में इंपोर्ट कर सकते हैं।.whl भी जनरेट कर सकते हैं:python -m pip wheel .
बस bochscpu मॉड्यूल इंपोर्ट करें और मज़े की शुरुआत करें! पैकेज इंस्टॉल करने से इंटरफ़ेस फ़ाइलें भी इंस्टॉल होंगी, जिससे आधुनिक IDEs (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
https://github.com/hugsy/bochscpu-python/assets/590234/eb06af06-4b10-490e-ae40-a1d0aed333ca
https://github.com/hugsy/bochscpu-python/assets/590234/2486adbc-0878-46f5-83ed-3bcf9774fd26