12
A
回答
3
您需要同時安裝Python 2.5和2.7以及byteplay(http://code.google.com/p/byteplay/)。
diz.py:
#!/usr/bin/env python
import byteplay, marshal, sys
if __name__ == '__main__':
sys.stdin.read(8)
c = byteplay.Code.from_code(marshal.load(sys.stdin)).code
labels = set([ x for l in c for x in l if isinstance(x, byteplay.Label) ])
labels = dict([(l,i) for (i,l) in enumerate(labels)])
byteplay.Label.__repr__ = lambda self: "labels[%d]" % labels[self]
print repr(c)
az.py:
#!/usr/bin/env python
import byteplay, sys, imp, struct, marshal, time
if __name__ == '__main__':
byteplay.labels = dict([(i, byteplay.Label()) for i in xrange(10000)])
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
asm = sys.stdin.read()
c = eval(asm, byteplay.__dict__)
c = byteplay.Code(c,(),(), 0, 0, 0, '', '', 0, '').to_code()
sys.stdout.write(imp.get_magic())
sys.stdout.write(struct.pack('<L', time.time()))
marshal.dump(c, sys.stdout)
用法:
python2.5 diz.py <foo.pyc> foo.az
python2.7 az.py <foo.az> foo.2.7.pyc
+1
當然,由於api的差異,模塊可能會在2.7上運行時引發異常,但是您可以隨時去破解由diz.py –
+0
生成的程序集,但這似乎沒有考慮嵌套代碼對象 – rumpel
相關問題
- 1. UnicodeDecodeError:'ascii'編解碼器無法解碼字節... Python 2.7和
- 2. 反編譯Python 2.7 .pyc
- 3. gwt 2.7超級開發模式如何重新編譯?
- 4. python 2.7編碼解碼
- 5. JavaScript字節碼編譯器?
- 6. 像Python一樣,可以將Ruby編譯爲字節碼嗎?
- 7. 用+ python重新編譯vim
- 8. 與Python Probleme編碼字符2.7
- 9. 是否可以緩存JSP字節碼以避免重新編譯爲Tomcat?
- 10. 翻譯python 3.4代碼到python 2.7
- 11. 如何重新編譯IL
- 12. 如何重新編譯nginx
- 13. python 2.7中的sys.argv編碼
- 14. 的Python 2.7編碼和feedparser
- 15. 如何將unicode編碼爲python 2.7中的urlenconing?
- 16. 爲什麼python在解釋之前將源代碼編譯成字節碼?
- 17. 如何讓Python/Nginx/FastCGI在更新/更改時自動重新編譯代碼?
- 18. 如何編譯Java字節碼字符串?
- 19. Python 2.7。編碼成python和cmd
- 20. 如何自動(重新)編譯ELPA包?
- 21. C++到CLR的字節碼編譯器?
- 22. JavaScript中的Java字節碼編譯器
- 23. 反編譯OCaml字節代碼文件
- 24. 可能反編譯R字節碼?
- 25. 是否有可能本機編譯Python(超越pyc字節碼)?
- 26. Python字節碼編譯器;刪除不必要的變量
- 27. 在Solaris上爲jython 2.5編譯Mysqldb
- 28. Python檢測字符串字節編碼
- 29. 編碼字符串字節在Python
- 30. 需要JSP重新編譯?
爲什麼?是不是2.5與2.7兼容的字節碼? –
我不會賭它。確切的字節碼格式通常是一個實現細節,預計不會是可移植的。 – delnan
+1;我不知道這是一個好主意,但這是一個有趣的問題。 – SingleNegationElimination