Python Language
डिस मॉड्यूल
खोज…
डिस मॉड्यूल में लगातार
EXTENDED_ARG = 145 # All opcodes greater than this have 2 operands
HAVE_ARGUMENT = 90 # All opcodes greater than this have at least 1 operands
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', 'is ...
# A list of comparator id's. The indecies are used as operands in some opcodes
# All opcodes in these lists have the respective types as there operands
hascompare = [107]
hasconst = [100]
hasfree = [135, 136, 137]
hasjabs = [111, 112, 113, 114, 115, 119]
hasjrel = [93, 110, 120, 121, 122, 143]
haslocal = [124, 125, 126]
hasname = [90, 91, 95, 96, 97, 98, 101, 106, 108, 109, 116]
# A map of opcodes to ids
opmap = {'BINARY_ADD': 23, 'BINARY_AND': 64, 'BINARY_DIVIDE': 21, 'BIN...
# A map of ids to opcodes
opname = ['STOP_CODE', 'POP_TOP', 'ROT_TWO', 'ROT_THREE', 'DUP_TOP', '...
पायथन बाइटकोड क्या है?
अजगर एक संकर दुभाषिया है। किसी प्रोग्राम को चलाने के दौरान, यह पहले इसे बाइटकोड में असेंबल करता है जिसे फिर पायथन इंटरप्रेटर (जिसे पायथन वर्चुअल मशीन भी कहा जाता है) में चलाया जा सकता है। मानक पुस्तकालय में dis
मॉड्यूल का उपयोग कक्षाओं, विधियों, कार्यों और कोड ऑब्जेक्टों को डिसैम्बल करके पाइथन बायटेकोड को मानव-पठनीय बनाने के लिए किया जा सकता है।
>>> def hello():
... print "Hello, World"
...
>>> dis.dis(hello)
2 0 LOAD_CONST 1 ('Hello, World')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
पायथन इंटरप्रेटर स्टैक-आधारित है और पहले-इन अंतिम-आउट सिस्टम का उपयोग करता है।
पायथन असेंबली लैंग्वेज (बाइटकोड) में प्रत्येक ऑपरेशन कोड (ओपकोड) स्टैक से निश्चित संख्या में आइटम लेता है और स्टैक के लिए निश्चित संख्या में आइटम देता है। यदि एक ओपकोड के लिए स्टैक पर पर्याप्त आइटम नहीं हैं, तो पायथन दुभाषिया दुर्घटनाग्रस्त हो जाएगा, संभवतः एक त्रुटि संदेश के बिना।
जुदा करने वाले मॉड्यूल
एक पायथन मॉड्यूल को अलग करने के लिए, पहले इसे एक .pyc
फ़ाइल (पायथन संकलित) में .pyc
। ऐसा करने के लिए, भागो
python -m compileall <file>.py
फिर एक दुभाषिया में, भागो
import dis
import marshal
with open("<file>.pyc", "rb") as code_f:
code_f.read(8) # Magic number and modification time
code = marshal.load(code_f) # Returns a code object which can be disassembled
dis.dis(code) # Output the disassembly
यह एक पायथन मॉड्यूल और उत्पादन के साथ बाईटकोड निर्देश संकलित कर देगा dis
। मॉड्यूल को कभी भी आयात नहीं किया जाता है इसलिए यह अविश्वसनीय कोड के साथ उपयोग करना सुरक्षित है।