]> granicus.if.org Git - python/commitdiff
read in a .pyc file and disassemble the code objects
authorJeremy Hylton <jeremy@alum.mit.edu>
Mon, 9 Oct 2000 14:35:24 +0000 (14:35 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Mon, 9 Oct 2000 14:35:24 +0000 (14:35 +0000)
Tools/compiler/dumppyc.py [new file with mode: 0755]

diff --git a/Tools/compiler/dumppyc.py b/Tools/compiler/dumppyc.py
new file mode 100755 (executable)
index 0000000..4ab9821
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/env python
+
+import marshal
+import dis
+import types
+
+def dump(obj):
+    print obj
+    for attr in dir(obj):
+        print "\t", attr, repr(getattr(obj, attr))
+
+def loadCode(path):
+    f = open(path)
+    f.read(8)
+    co = marshal.load(f)
+    f.close()
+    return co
+
+def walk(co, match=None):
+    if match is None or co.co_name == match:
+        dump(co)
+        print
+        dis.dis(co)
+    for obj in co.co_consts:
+        if type(obj) == types.CodeType:
+            walk(obj, match)
+
+def main(filename, codename=None):
+    co = loadCode(filename)
+    walk(co, codename)
+
+if __name__ == "__main__":
+    import sys
+    if len(sys.argv) == 3:
+        filename, codename = sys.argv[1:]
+    else:
+        filename = sys.argv[1]
+        codename = None
+    main(filename, codename)