
प्रक्रियाओं की मेमोरी और पतों का निरीक्षण करने के लिए डिज़ाइन किया गया एक BOF
एक CS BOF जिसका उपयोग प्रक्रिया मेमोरी, पतों और प्रतीकों का निरीक्षण करने के लिए किया जा सकता है!
| आदेश | विवरण |
|---|---|
| lm | सभी लोड किए गए मॉड्यूल को बेस पता, प्रवेश बिंदु आदि के साथ सूचीबद्ध करें |
| addr | किसी दिए गए मेमोरी पते पर बाइट्स प्रिंट करें |
| meminfo | किसी दिए गए मेमोरी पते के लिए जानकारी प्रिंट करें |
| lt | वर्तमान प्रक्रिया में सभी सक्रिय थ्रेड्स की सूची कुछ बुनियादी जानकारी के साथ प्रिंट करें |
| regdump | एक थ्रेड के रजिस्टरों की सामग्री प्रिंट करें |
पैच भेजें! और आदेशों के लिए सिफारिशें भेजें!
lm आदेश वर्तमान प्रक्रिया में लोड किए गए मॉड्यूल को सूचीबद्ध करता है। बिना तर्क के आह्वान करने पर यह सभी लोड किए गए DLL लौटाता है; जब एक DLL नाम दिया जाता है तो यह उस मॉड्यूल के लिए केवल विवरण (बेस पता, प्रवेश बिंदु, आकार, पूर्ण पथ) लौटाता है।
वाक्य-विन्यास
psi lm [dll]
पैरामीटर:
dll (वैकल्पिक): खोजने के लिए एक लोड किए गए DLL का नाम। यदि छोड़ दिया जाए, तो प्रत्येक लोड किए गए मॉड्यूल को सूचीबद्ध किया जाता है।उदाहरण:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
addr आदेश किसी दिए गए पते पर मान लौटाता है।
वाक्य-विन्यास:
psi addr <address> <type> [count]
address: हेक्स में निरीक्षण करने का पताtype: यह नियंत्रित करता है कि दिए गए पते पर डेटा के प्रकार को कैसे माना जाए। मान्य मान हैं: BYTE, WORD, DWORD, LPVOID। इसलिए, यदि कोई उपयोगकर्ता मान DWORD प्रदान करता है, तो उस पते पर size(DWORD) का एक खंड पढ़ा जाता है। प्रत्येक खंड को 0x-उपसर्गित लिटिल-एंडियन मान के रूप में मुद्रित किया जाता है जिसकी चौड़ाई प्रकार के आकार के बराबर होती है (जैसे, एक WORD पंक्ति 0xaabb 0xccdd ... के रूप में समूहित होती है)। प्रकार के नाम केस-असंवेदनशील रूप से मिलाए जाते हैं। समान आकार के Win32 उपनाम (int, ULONG, ULONG64, HANDLE, आदि) को जानबूझकर छोड़ दिया गया है — 1/2/4/8-बाइट रीड के लिए BYTE/WORD// का उपयोग करें।आउटपुट एक हेक्सडंप होना चाहिए जो दिए गए पते से शुरू हो और खंड एक साथ समूहित हों।
उदाहरण:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
meminfo आदेश किसी दिए गए मेमोरी पते के बारे में विभिन्न जानकारी लौटाता है जिसमें शामिल हैं:
वाक्य-विन्यास:
psi meminfo <address>
address: हेक्स में निरीक्षण करने का पताउदाहरण:
psi addr 0xdeadbeef
lt आदेश वर्तमान प्रक्रिया के सभी थ्रेड्स को उनके TID और प्रवेश बिंदु के साथ प्रिंट करता है।
वाक्य-विन्यास
psi lt
regdump आदेश एक थ्रेड के CPU रजिस्टरों को डंप करता है। थ्रेड आईडी (tid) वैकल्पिक है: यदि छोड़ दिया जाए, तो कॉलिंग बीकन थ्रेड को RtlCaptureContext के माध्यम से डंप किया जाता है; यदि प्रदान किया जाए, तो वर्तमान प्रक्रिया में उस थ्रेड को स्नैपशॉट की अवधि के लिए निलंबित कर दिया जाता है। यदि एक रजिस्टर नाम प्रदान किया जाता है, तो केवल वह रजिस्टर मुद्रित होता है; अन्यथा प्रत्येक समर्थित रजिस्टर डंप किया जाता है, जिसमें पूर्ण x64 GPR सेट के साथ RFLAGS, सेगमेंट रजिस्टर, डीबग रजिस्टर, SSE (XMM), AVX/AVX2 (YMM), और AVX-512 (ZMM / kmask) शामिल हैं — अंतिम तीन होस्ट के CPU सुविधा समर्थन पर आधारित होते हैं। रजिस्टर नाम केस-असंवेदनशील रूप से मिलाए जाते हैं और उप-चौड़ाई वाले उपनामों को स्वीकार करते हैं (जैसे, eax, ax, ah, al सभी एक ही अंतर्निहित GPR के विरुद्ध हल होते हैं)।
वाक्य-विन्यास:
psi regdump [tid] [register]
tid: वैकल्पिक थ्रेड आईडी जिसका संदर्भ डंप किया जाना है। यदि छोड़ दिया जाए, तो कॉलिंग बीकन थ्रेड को सीधे कैप्चर किया जाता है।register: वैकल्पिक रजिस्टर नाम जो आउटपुट को एक रजिस्टर तक फ़िल्टर करता है। tid का निर्दिष्ट होना आवश्यक है।उदाहरण:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
BOF संकलित करने के लिए, src/hello.cc फ़ाइल या Makefile को आवश्यक परिवर्तनों को दर्शाने के लिए अपडेट करें और फिर टाइप करें:
$ docker-compose up --build
इस टेम्पलेट से बनाया गया: https://github.com/whokilleddb/cs-bof-template
DWORDLPVOIDcount: कितने खंड पढ़ने हैं। यह तर्क वैकल्पिक है और डिफ़ॉल्ट रूप से एक पर सेट है।