Cobra —— 对Python源文件进行完整反汇编

不论是Python标准库中自带的dis,还是我们之前看到的sdis,都只能一次对一段代码进行反汇编,对于Cobra来说,这还不是很方便。为了在Cobra的GUI界面中显示对一个.py文件完整的反汇编结果,我们还需要一个比sdis更加强大的反汇编工具,这就是disassemble。

disassemble能一次性地对一个.py文件进行完整的反汇编,同时将反汇编结果以用户用好的方式嵌入到源文件中,从而为Cobra的显示提供了基础。

下面是利用disassemble来反汇编某个.py文件的例子:

>>> from core.disassemble import Disassemble
>>> dis = Disassemble()
>>> result = dis.parsePyFile('../demo.py')
>>> print >> open('demo_dised.ppy', 'w'), result

 下面是源文件和反汇编的结果文件:

【源文件:demo.py】

 

def  f():
    
pass
    
def  g():
    
print   ' hello world '
    
def  fun():
        
pass
    
class  MyClass(object):
    
def   __init__ (self):
        
pass
    
=   1
+=   1
print  a

 

【反汇编结果文件:demo_dised.py】

 

def  f():
# #1    0    LOAD_CONST        0    (<code object f at 00B47608, file "../demo.py", line 1>)
#
#1    3    MAKE_FUNCTION        0     
#
#1    6    STORE_NAME        0    (f)
     pass
    
# #2    0    LOAD_CONST        0    (None)
     # #2    3    RETURN_VALUE              

def  g():
# #4    9    LOAD_CONST        1    (<code object g at 00B51380, file "../demo.py", line 4>)
#
#4    12    MAKE_FUNCTION        0     
#
#4    15    STORE_NAME        1    (g)
     print   ' hello world '
    
# #5    0    LOAD_CONST        1    ('hello world')
     # #5    3    PRINT_ITEM              
     # #5    4    PRINT_NEWLINE              
     def  fun():
    
# #6    5    LOAD_CONST        2    (<code object fun at 00B516E0, file "../demo.py", line 6>)
     # #6    8    MAKE_FUNCTION        0     
     # #6    11    STORE_FAST        0    (fun)
     # #6    14    LOAD_CONST        0    (None)
     # #6    17    RETURN_VALUE              
         pass
        
# #7    0    LOAD_CONST        0    (None)
         # #7    3    RETURN_VALUE              

class  MyClass(object):
# #9    0    LOAD_NAME        0    (__name__)
#
#9    3    STORE_NAME        1    (__module__)
#
#9    18    LOAD_CONST        2    ('MyClass')
#
#9    21    LOAD_NAME        2    (object)
#
#9    24    BUILD_TUPLE        1     
#
#9    27    LOAD_CONST        3    (<code object MyClass at 00B514A0, file "../demo.py", line 9>)
#
#9    30    MAKE_FUNCTION        0     
#
#9    33    CALL_FUNCTION        0     
#
#9    36    BUILD_CLASS              
#
#9    37    STORE_NAME        3    (MyClass)
     def   __init__ (self):
    
# #10    6    LOAD_CONST        0    (<code object __init__ at 00B512F0, file "../demo.py", line 10>)
     # #10    9    MAKE_FUNCTION        0     
     # #10    12    STORE_NAME        2    (__init__)
     # #10    15    LOAD_LOCALS              
     # #10    16    RETURN_VALUE              
         pass
        
# #11    0    LOAD_CONST        0    (None)
         # #11    3    RETURN_VALUE              

=   1
# #13    40    LOAD_CONST        4    (1)
#
#13    43    STORE_NAME        4    (a)
+=   1
# #14    46    LOAD_NAME        4    (a)
#
#14    49    LOAD_CONST        4    (1)
#
#14    52    INPLACE_ADD              
#
#14    53    STORE_NAME        4    (a)
print  a
# #15    56    LOAD_NAME        4    (a)
#
#15    59    PRINT_ITEM              
#
#15    60    PRINT_NEWLINE              
#
#15    61    LOAD_CONST        5    (None)
#
#15    64    RETURN_VALUE              

你可能感兴趣的:(python,object,汇编,function,Class,newline)