지금까지 python3에는 안정적인 작동 디 컴파일러가 없습니다. 가장 가까운 것은 가장 좋은 버그 인 unpyc3입니다. 나는 파이썬을 위해 일할 수있는 디 컴파일러를 만들고 싶지만, 어떻게 진행할 것인가? 내가 파이썬으로 만들고 싶지만 모든 언어에서 작동하는 전역 디 컴파일러를 사용할 수 있습니까? 프로그램이 주어진 언어의 모든 라이브러리에 액세스 할 수 있고 컴파일 된 파일이 주어진다면 컴퓨터가이를 수행 할 수 있습니까? 이것은 기계어와 함께 작동하므로 디 컴파일시이 문제가 발생합니까?Decompiler python et al
답변
uncompyle6 꽤 좋은 파이썬 3. 일반적으로이 작업을 수행 how it works 설명은 위키를 참조하기 위해 작성하는 방법에 대한 질문에 대해서는
작동합니다.
그러나 아래 단계를 대략적으로 설명하겠습니다.
먼저 특정 CPU 유형의 머신 코드 또는 가상 머신의 바이트 코드를 포함 할 수있는 "실행 파일"을 읽는 방법을 이해해야합니다. Uncompyle6은 문법을 사용하여 프로그램을 재구성합니다. 디스 어셈블 된 기계 명령어는 용어 "토큰"을 구문 분석 할 때 호출됩니다. 예를 들어 "token : number of value 5"대신 "LOAD_CONST
instruction is value 5"를 사용합니다.
이 후에는 제어 흐름을 이해하고 싶을 것입니다. 그리고 일반적으로 기본 블록이나 직선 코드가 결정됩니다. 토큰이 점프 명령임을 grok하기 때문에 이제 할 수 있습니다.
uncompyle6이 사용하는 기본적인 아이디어는 문법에 제어 흐름을 감지 할 수 있도록 토큰을 추가하는 것입니다.
SETUP_LOOP
JUMP_IF FALSE X
...
X:
을 그리고 그 말의 나타 내기 위해 X에서 뭔가를 추가 : 그래서 약이 볼 수 있습니다 당신은 다음 추상 구문 트리 (AST)를 구축 할 수있는 각 기본 블록 내부
SETUP_LOOP
JUMP_IF_FALSE X
...
COME_FROM_LOOP # this is added
표현과 기본 블록 내부의 명령. uncompyle6에서 사용 된 접근법은 문맥 자유 문법을 사용하는 것입니다. pycdc과 같은 다른 Python3 프로그램이나 unpyc3 프로그램은 그렇게하지 않습니다. 대신 스택을 사용하여 트리를 빌드하고 지시 사항을 선형 스캔하십시오. 아마도 당신은 문법이 같은 일을 할 것입니다 방법을 볼 수있는이
LOAD a # tree/stack: | a
LOAD b # tree/stack: | b, a
LOAD c # tree/stack: | c, b, a
ADD # tree/stack: (c + b) | a
MULTIPLY # tree/stack: (c + b) * a
STORE d # tree/stack: d = (c + b) * a |
의 몇 가지 아이디어를 제공합니다.
uncompyle6을 제안 했으니 까, 지금은 대단히 임시적인 제어 흐름 분석 부분에서 꽤 약하다고 말할 수 있습니다.
디 컴파일러 작성에 관심을 표명 했으므로 기존 컴파일러를 사용하여 더 나은 결과를 얻으려면 어떻게해야합니까?
- 1. MIPS Decompiler
- 2. 자바 Decompiler 사용하는 방법?
- 3. Google 폐쇄 decompiler?
- 4. C# 명령 줄 decompiler
- 5. 어떻게해야합니까? al. 작업?
- 6. extern (al) 문제
- 7. Al Zimmermann의 다트 아들
- 8. Segfault running cmp 'A', % al‽
- 9. HTML 또는 Javascript Decompiler 사용 가능
- 10. 불변하게 ET DST/STD를 UTC로 변환합니다
- 11. ET : EST 또는 EDT의 현재 시간 찾기
- 12. MSBuild AL (어셈블리 링커) 타이밍 문제?
- 13. 이 명령어가 잘못 되었습니까? (movabs % al, 0xe400000000004049)
- 14. Django treebeard AL, NS, MP의 차이점
- 15. Eclipse 용 Java Decompiler (JD Eclipse)가 Gamymede에서 실행되지 않음
- 16. R 구문 Stat ET/Eclipse에 대한 자동 완성?
- 17. ET-Match를 조건부로 업데이트하기 위해 IF-Match를 사용할 수 있습니까?
- 18. Vim의 기능 이름은 무엇입니까? # vim : sw = 4 : ts = 4 : et :
- 19. 연결이 설정되었을 때 epoll ET 모드에서 즉시 데이터를 보내는 방법
- 20. Python prebuilt
- 21. 어셈블러에서 AH, AL, BH 및 BL 레지스터의 값을 인쇄합니까?
- 22. Hijri (Umm Al-Qura) 캘린더 용 Java 라이브러리
- 23. 우분투 컴퓨터에서 "ls -al /"결과가 필요합니다 (10.4 바람직하게)
- 24. Omar AL Zabir의 Droptiles은 어떤 HTML5 기능을 지원합니까?
- 25. C# : 행렬 곱셈 등을위한 XNA 벡터 선언 및 사용 al
- 26. FTPopen(), FTPclose() 등의 API 설명서. al. on Tandem
- 27. 정규 표현식 대체 Python
- 28. et Wi ndow Te xt는() 오류를 던지고 나는 내부 예외로 던진 다음 오류 얻을 et Wi ndow Te xt는 아래의 코드를 실행하면 시도/캐치
- 29. python parse xml string
- 30. Python : URL을 찾고 쿼리 문자열 쌍을 추가하십시오.
파이썬이 컴파일되지 않았습니다 ... – mgilson
파이썬 바이트 코드 (pyc 파일)를 파이썬 소스 코드로 변환하는 방법을 찾고 계십니까? – Michael0x2a
네, 그게 내가 pyc 파일을 파이썬 소스 컴파일 된 일을하고 싶지 않아요? – user1775641