Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
pyvex — Valgrind के VEX IR के लिए Python बाइंडिंग्स। | Kitploit
उपकरण/GitHubGitHub/angr/pyvex
स्थैतिक विश्लेषणभेद्यता विश्लेषणकोड विश्लेषणरिवर्स इंजीनियरिंगउपयोगिताएँ और फ्रेमवर्कबाइनरी विश्लेषणपेपर और शोध
GitHubangr/pyvex

pyvex

Valgrind के VEX IR के लिए Python बाइंडिंग्स।

रिपॉजिटरी देखें
380129134 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

PyVEX

Latest Release Python Version PyPI Statistics License

PyVEX, VEX IR के लिए Python bindings है।

प्रोजेक्ट लिंक

प्रोजेक्ट रिपॉजिटरी: https://github.com/angr/pyvex

दस्तावेज़ीकरण: https://api.angr.io/projects/pyvex/en/latest/

PyVEX इंस्टॉल करना

PyVEX को pip के माध्यम से इंस्टॉल किया जा सकता है:

pip install pyvex

PyVEX का उपयोग करना

import pyvex
import archinfo

# translate an AMD64 basic block (of nops) at 0x400400 into VEX
irsb = pyvex.lift(b"\x90\x90\x90\x90\x90", 0x400400, archinfo.ArchAMD64())

# pretty-print the basic block
irsb.pp()

# this is the IR Expression of the jump target of the unconditional exit at the end of the basic block
print(irsb.next)

# this is the type of the unconditional exit (i.e., a call, ret, syscall, etc)
print(irsb.jumpkind)

# you can also pretty-print it
irsb.next.pp()

# iterate through each statement and print all the statements
for stmt in irsb.statements:
    stmt.pp()

# pretty-print the IR expression representing the data, and the *type* of that IR expression written by every store statement
import pyvex
for stmt in irsb.statements:
    if isinstance(stmt, pyvex.IRStmt.Store):
        print("Data:", end="")
        stmt.data.pp()
        print("")

        print("Type:", end="")
        print(stmt.data.result_type)
        print("")

# pretty-print the condition and jump target of every conditional exit from the basic block
for stmt in irsb.statements:
    if isinstance(stmt, pyvex.IRStmt.Exit):
        print("Condition:", end="")
        stmt.guard.pp()
        print("")

        print("Target:", end="")
        stmt.dst.pp()
        print("")

# these are the types of every temp in the IRSB
print(irsb.tyenv.types)

# here is one way to get the type of temp 0
print(irsb.tyenv.types[0])

ध्यान रखें कि यह एक बेसिक ब्लॉक का syntactic प्रतिनिधित्व है। अर्थात्, यह आपको बताएगा कि ब्लॉक का क्या अर्थ है, लेकिन आपके पास यह कहने के लिए कोई संदर्भ नहीं होता कि, उदाहरण के लिए, किसी store निर्देश द्वारा वास्तविक रूप से कौन-सा डेटा लिखा जाता है।

VEX Intermediate Representation

व्यापक रूप से विविध आर्किटेक्चरों से निपटने के लिए, एक intermediate representation पर विश्लेषण करना उपयोगी होता है। एक IR विभिन्न आर्किटेक्चरों से निपटते समय कई आर्किटेक्चर अंतरों को अमूर्त कर देता है, जिससे एक ही विश्लेषण उन सभी पर चलाया जा सकता है:

  • रजिस्टर नाम। रजिस्टरों की संख्या और नाम आर्किटेक्चरों के बीच भिन्न होते हैं, लेकिन आधुनिक CPU डिज़ाइन एक सामान्य विषय का पालन करते हैं: प्रत्येक CPU में कई general purpose रजिस्टर, स्टैक पॉइंटर रखने के लिए एक रजिस्टर, condition flags संग्रहीत करने के लिए रजिस्टरों का एक सेट, इत्यादि होते हैं। IR विभिन्न प्लेटफ़ॉर्मों पर रजिस्टरों के लिए एक सुसंगत, अमूर्त इंटरफ़ेस प्रदान करता है। विशेष रूप से, VEX रजिस्टरों को एक अलग मेमोरी स्पेस के रूप में मॉडल करता है, जिसमें integer offsets होते हैं (अर्थात्, AMD64 का rax इस मेमोरी स्पेस में address 16 से शुरू होकर संग्रहीत होता है)।
  • मेमोरी एक्सेस। विभिन्न आर्किटेक्चर मेमोरी को विभिन्न तरीकों से एक्सेस करते हैं। उदाहरण के लिए, ARM मेमोरी को little-endian और big-endian दोनों मोड में एक्सेस कर सकता है। IR को इन अंतरों को अमूर्त करना चाहिए।
  • मेमोरी सेगमेंटेशन। कुछ आर्किटेक्चर, जैसे x86, विशेष segment रजिस्टरों के उपयोग के माध्यम से मेमोरी सेगमेंटेशन का समर्थन करते हैं। IR ऐसी मेमोरी एक्सेस व्यवस्थाओं को समझता है।
  • निर्देश साइड-इफेक्ट्स। अधिकांश निर्देशों के साइड-इफेक्ट्स होते हैं। उदाहरण के लिए, ARM पर Thumb मोड में अधिकांश ऑपरेशन condition flags को अपडेट करते हैं, और stack push/pop निर्देश स्टैक पॉइंटर को अपडेट करते हैं। विश्लेषण में इन साइड-इफेक्ट्स को ad hoc तरीके से ट्रैक करना पागलपन होगा, इसलिए IR इन प्रभावों को स्पष्ट बनाता है।

एक IR के लिए बहुत सारे विकल्प हैं। हम VEX का उपयोग करते हैं, क्योंकि बाइनरी कोड को VEX में uplift करना काफी अच्छी तरह समर्थित है। VEX कई लक्ष्य मशीन भाषाओं का एक architecture-agnostic, side-effects-free प्रतिनिधित्व है। यह मशीन कोड को एक ऐसे प्रतिनिधित्व में अमूर्त करता है जिसे प्रोग्राम विश्लेषण को आसान बनाने के लिए डिज़ाइन किया गया है। इस प्रतिनिधित्व में मुख्य रूप से पाँच वर्ग के ऑब्जेक्ट होते हैं:

  • Expressions। IR Expressions एक परिकलित या स्थिर मान का प्रतिनिधित्व करते हैं। इसमें मेमोरी लोड, रजिस्टर रीड, और अंकगणितीय ऑपरेशनों के परिणाम शामिल हैं।
  • Operations। IR Operations IR Expressions के एक संशोधन का वर्णन करते हैं। इसमें integer अंकगणित, floating-point अंकगणित, बिट ऑपरेशन, इत्यादि शामिल हैं। IR Expressions पर लागू एक IR Operation परिणामस्वरूप एक IR Expression देता है।
  • Temporary variables। VEX temporary variables को आंतरिक रजिस्टरों के रूप में उपयोग करता है: उपयोग के बीच IR Expressions temporary variables में संग्रहीत होते हैं। एक temporary variable की सामग्री को एक IR Expression का उपयोग करके प्राप्त किया जा सकता है। ये temporaries क्रमांकित होते हैं, t0 से शुरू होकर। ये temporaries strongly typed होते हैं (अर्थात्, "64-bit integer" या "32-bit float")।
  • Statements। IR Statements लक्ष्य मशीन की स्थिति में परिवर्तनों को मॉडल करते हैं, जैसे मेमोरी stores और रजिस्टर writes का प्रभाव। IR Statements उन मानों के लिए IR Expressions का उपयोग करते हैं जिनकी उन्हें आवश्यकता हो सकती है। उदाहरण के लिए, एक memory store IR Statement write के लक्ष्य address के लिए एक IR Expression का उपयोग करता है, और सामग्री के लिए एक अन्य IR Expression का।
  • Blocks। एक IR Block IR Statements का एक संग्रह है, जो लक्ष्य आर्किटेक्चर में एक extended basic block ("IR Super Block" या "IRSB" कहलाता है) का प्रतिनिधित्व करता है। एक ब्लॉक के कई exits हो सकते हैं। एक बेसिक ब्लॉक के मध्य से conditional exits के लिए, एक विशेष Exit IR Statement का उपयोग किया जाता है। ब्लॉक के अंत में unconditional exit के लक्ष्य का प्रतिनिधित्व करने के लिए एक IR Expression का उपयोग किया जाता है।

VEX IR वास्तव में VEX रिपॉजिटरी में libvex_ir.h फ़ाइल (https://github.com/angr/vex/blob/dev/pub/libvex_ir.h) में काफी अच्छी तरह प्रलेखित है। आलसी लोगों के लिए, हम VEX के कुछ ऐसे भागों का विवरण देंगे जिनके साथ आप संभवतः काफी बार इंटरैक्ट करेंगे। आरंभ करने के लिए, यहाँ कुछ IR Expressions हैं:

IR ExpressionEvaluated ValueVEX Output Example
Constantएक स्थिर मान।0x4:I32
Read Tempएक VEX temporary variable में संग्रहीत मान।RdTmp(t10)
Get Registerएक रजिस्टर में संग्रहीत मान।GET:I32(16)
Load Memoryएक मेमोरी address पर संग्रहीत मान, जिसका address एक अन्य IR Expression द्वारा निर्दिष्ट होता है।LDle:I32 / LDbe:I64
Operationएक निर्दिष्ट IR Operation का परिणाम, जो निर्दिष्ट IR Expression arguments पर लागू होता है।Add32
If-Then-Elseयदि दिया गया IR Expression 0 पर evaluate होता है, तो एक IR Expression लौटाएँ। अन्यथा, दूसरा लौटाएँ।ITE
Helper FunctionVEX कुछ ऑपरेशनों के लिए C helper functions का उपयोग करता है, जैसे कुछ आर्किटेक्चरों के conditional flags रजिस्टरों की गणना करना। ये functions IR Expressions लौटाते हैं।function_name()

इन expressions का उपयोग, बदले में, IR Statements में किया जाता है। यहाँ कुछ सामान्य हैं:

टूल डाउनलोड करें