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. 編譯libdnet爲Python 2.7
- 2. 如何將動態編譯的字節重新編碼爲文本?
- 3. Python 2.7編碼
- 4. 如何將JVM彙編代碼編譯爲字節碼?
- 5. Python 2.5的編碼
- 6. UnicodeDecodeError:'ascii'編解碼器無法解碼字節... Python 2.7和
- 7. 反編譯Python 2.7 .pyc
- 8. 如何重新編譯GHDL源代碼
- 9. gwt 2.7超級開發模式如何重新編譯?
- 10. python 2.7編碼解碼
- 11. JavaScript字節碼編譯器?
- 12. 字節碼編譯錯誤
- 13. Python youtube-dl重新編譯
- 14. 像Python一樣,可以將Ruby編譯爲字節碼嗎?
- 15. 用+ python重新編譯vim
- 16. 與Python Probleme編碼字符2.7
- 17. 如何重新編譯variables.less?
- 18. 是否可以緩存JSP字節碼以避免重新編譯爲Tomcat?
- 19. 如何將vm字節碼反編譯爲java
- 20. 翻譯python 3.4代碼到python 2.7
- 21. 如何重新編譯IL
- 22. 重新安裝GDAL庫爲Python 2.7
- 23. 已經在Python 2.7系統上從源代碼編譯Python 2.7.3
- 24. 如何重新編譯nginx
- 25. python 2.7中的sys.argv編碼
- 26. 的Python 2.7編碼和feedparser
- 27. 重新編譯爲* .Jar反編譯並修復代碼後?
- 28. 編碼爲字節
- 29. 在Windows上沒有默認的字節碼編譯Python代碼?
- 30. 如何將數值編碼爲字節
爲什麼?是不是2.5與2.7兼容的字節碼? –
我不會賭它。確切的字節碼格式通常是一個實現細節,預計不會是可移植的。 – delnan
+1;我不知道這是一個好主意,但這是一個有趣的問題。 – SingleNegationElimination