Python Language
dis 모듈
수색…
dis 모듈의 상수
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', '...
파이썬 바이트 코드 란 무엇입니까?
파이썬은 하이브리드 인터프리터입니다. 프로그램을 실행할 때 먼저 프로그램을 바이트 코드 로 어셈블 링 한 다음 파이썬 인터프리터 ( Python 가상 시스템 이라고도 함)에서 실행할 수 있습니다. 표준 라이브러리의 dis
모듈은 클래스, 메소드, 함수 및 코드 객체를 디스 어셈블하여 사람이 읽을 수있는 Python 바이트 코드를 만들 수 있습니다.
>>> 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
파이썬 인터프리터는 스택 기반이며 선입 선출 시스템을 사용합니다.
파이썬 어셈블리 언어 (바이트 코드)의 각 연산 코드 (opcode)는 스택에서 고정 된 수의 항목을 취하여 고정 된 수의 항목을 스택에 반환합니다. opcode에 스택에 충분한 항목이 없으면 오류 메시지없이 파이썬 인터프리터가 중단됩니다.
모듈 분해
파이썬 모듈을 디스 어셈블하려면 먼저 .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
와 함께 바이트 코드 명령어를 출력합니다. 신뢰할 수없는 코드와 함께 사용하는 것이 안전하기 때문에 모듈을 가져올 수 없습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow