//usr/lib64/lib64//lib64/lib64/python2.7/
ٜSec @ s d Z d d l Z d d l Z d d l Td d l m Z d d d d d d
g e Z [ e j e j e j e j e
f Z d d Z
d d Z d d
Z d d d d d Z e Z d Z d Z d Z e d k r e n d S( s0 Disassembler of Python byte code into mnemonics.iN( t *( t __all__t dist disassemblet distbt discot findlinestartst
findlabelsc C sH | d k r t d St | t j r5 | j } n t | d rP | j } n t | d rk | j } n t | d r | j j
} | j x | D]U \ } } t | t r d | GHy t
| Wn t k
r } d G| GHn XHq q WnN t | d rt | n2 t | t r.t | n t d t | j d S( sn Disassemble classes, methods, functions, or code.
With no argument, disassemble the last traceback.
Nt im_funct func_codet __dict__s Disassembly of %s:s Sorry:t co_codes( don't know how to disassemble %s objects( t NoneR t
isinstancet typest InstanceTypet __class__t hasattrR R R
t itemst sortt
_have_codeR t TypeErrorR t strt disassemble_stringt typet __name__( t xR t namet x1t msg( ( s /usr/lib64/python2.7/dis.pyR s6
c C sl | d k rR y
t j } Wn t k
r5 t d n Xx | j rN | j } q9 Wn t | j j | j d S( s2 Disassemble a traceback (default: last traceback).s no last traceback to disassembleN(
R t syst last_tracebackt AttributeErrort RuntimeErrort tb_nextR t tb_framet f_codet tb_lasti( t tb( ( s /usr/lib64/python2.7/dis.pyR 3 s
c C sa | j } t | } t t | } t | } d } d } d } x| | k r\| | } t | }
| | k r | d k r Hn d | | Gn d G| | k r d Gn d G| | k r d Gn d Gt | j d Gt |
j
d G| d } |
t k rXt | | t | | d d
| } d } | d } |
t k rT| d } n t | j d
G|
t
k rd t | j | d GqX|
t k rd | j | d GqX|
t k rd t | | d GqX|
t k rd | j | d GqX|
t k rd t | d GqX|
t k rX| d k rB| j | j } n d | | d GqXn HqH Wd S( s Disassemble a code object.i s %3ds s -->s >>s i i i i i l i t (t )s (to N( R R t dictR t lenR t ordt reprt rjustt opnamet ljustt
HAVE_ARGUMENTt EXTENDED_ARGt hasconstt co_constst hasnamet co_namest hasjrelt haslocalt co_varnamest
hascomparet cmp_opt hasfreet co_cellvarst co_freevars( t cot lastit codet labelst
linestartst nt it extended_argt freet ct opt oparg( ( s /usr/lib64/python2.7/dis.pyR = s\
*
c C s t | } t | } d } x| | k r| | } t | } | | k rV d Gn d G| | k rm d Gn d Gt | j d Gt | j d G| d } | t k rt | | t | | d d }
| d
} t |
j d G| t k r$| rd t | |
d
Gqd |
Gq| t k rZ| d k rOd | |
d
Gqd |
Gq| t k rd t | |
d
Gq| t k r| rd | |
d
Gqd |
Gq| t
k rd t |
d
Gqn Hq! Wd S( Ni s -->s s >>s i i i i i i R' R( s (%d)s (to ( R R* R+ R, R- R. R/ R0 R2 R4 R R6 R7 R9 R: ( R@ R? t varnamest namest constantsRA RC RD RG RH RI ( ( s /usr/lib64/python2.7/dis.pyR n sH
&
c C s g } t | } d } x | | k r | | } t | } | d } | t k r t | | t | | d d } | d } d } | t k r | | } n | t k r | } n | d k r | | k r | j | q q q q W| S( s` Detect all offsets in a byte code which are jump targets.
Return the list of offsets.
i i i i i( R* R+ R0 R6 t hasjabst append( R@ RA RC RD RG RH RI t label( ( s /usr/lib64/python2.7/dis.pyR s&