
    bF.                     L   d dl mZ d dlZd dlZd dlZd dlZd dlZd Zd Zd Z	d Z
d Zd Zd	 Z G d
 d          Zd#dZd Zdad Zd Zd Zd Zd ZedddedddeddddZd Zi Zd Zd Z G d d          Zd Zd ZeeeedZd  Z d! Z!e"d"k    r e!             dS dS )$    )print_functionNc                     | d         rt          | d         d          S t          j        dk     rt          j        S t          j                                        rt          j        S t          j        j        S )Ninrb   r   )opensysversion_infostdinisattybufferoptss    ,/usr/lib/python3/dist-packages/pycriu/cli.pyinfr   
   sa    Dz  DJ%%%v%%99 	9y    c                     | d         rd}|rd}t          | d         |          S t          j        dk     rt          j        S |rt          j        S t          j        j        S )Noutzwb+zw+r   )r	   r
   r   stdoutr   )r   decodemodes      r   outfr      sg     E{ 
! 	DDK&&&v%%: 	:z  r   c                 l    t          t          j                            | d         |          d          S )Ndirr   )r   )r	   ospathjoin)r   names     r   dinfr    &   s)    T%[$//d;;;;r   c                    d }	 t           j                            t          |           | d         | d                   }nX# t           j        j        $ rA}t          d|j        z  t          j                   t          j	        d           Y d }~nd }~ww xY w| d         rd}t          | d          }t          j        |||           |t          j        k    r|                    d	           d S d S )
NprettynoplzSUnknown magic %#x.
Maybe you are feeding me an image with raw data(i.e. pages.img)?file      Tindent
)pycriuimagesloadr   MagicExceptionprintmagicr
   stderrexitr   jsondumpr   write)r   r)   imgexcfs        r   r   r   *   s    Fm  TDNDLII='    &(+	28;
	D 	D 	D 	D 		 H~ T4AIc1V$$$$CJ	 s   :? B7BBc                 &   	 t          j        t          |                     }n?# t          $ r2 t	          dt
          j                   t          j        d           Y nw xY wt          j	        
                    |t          | d                     d S )NzbCannot read JSON.
Maybe you are feeding me an image with protobuf data? Encode expects JSON input.r$   r&   F)r3   r-   r   UnicodeDecodeErrorr/   r
   r1   r2   r+   r,   r4   r   )r   r6   s     r   encoder;   >   s    iD		""    '-0Z	9 	9 	9 	9 		
 MsDu--.....s   !$ 9A A c                     t           j                            t          |                     }t	          j        |t          j        d           t                       d S )Nr'   r(   )	r+   r,   infor   r3   r4   r
   r   r/   )r   infss     r   r=   r=   I   sC    =c$ii((DIdCJq))))	GGGGGr   c                 <    || v r| |         n| d|z            d         S )Nns_r    )pvals     r   get_task_idrD   O   s%    AXX1S661US[>!#44r   c                       e Zd Zd ZdS )ps_itemc                 t    t          |d          | _        |d         | _        || _        || _        g | _        d S )Npidppid)rD   rH   rI   rB   corekids)selfrB   rJ   s      r   __init__zps_item.__init__Y   s7    q%((fI					r   N)__name__
__module____qualname__rM   rA   r   r   rF   rF   X   s#            r   rF   c           	          t          d| j        t          | j        d          t          | j        d          dd|z  z  | j        d         d         fz             | j        D ]}t          |||dz              d S )	Nz%7d%7d%7d   %s%spgidsid r'   tccommr&   )r/   rH   rD   rB   rJ   rK   show_ps)rB   r   depthkids       r   rW   rW   a   s    	
5+ac6**KU,C,CSIFtV,.. / / / v & &T519%%%%& &r   c                    i }t           j                            t          | d                    }|d         D ]f}t           j                            t          | dt	          |d          z                      }t          ||d         d                   }|||j        <   gd }|D ]?}||         }|j        dk    r|}||j                 }|j        	                    |           @t          ddz             t          ||            d S )N
pstree.imgentrieszcore-%d.imgrH   r   z%7s%7s%7s   %s)PIDPGIDSIDCOMM)r+   r,   r-   r    rD   rF   rH   rI   rK   appendr/   rW   )	r   pssps_imgrB   rJ   pspsrrH   pps	            r   
explore_psrg   i   s   
C]T< 8 899FI  }!!}{1e'<'<<==? ?QY*++BF C  H6Q;;C[
q	
;
;<<<Cr   c                     t           >	 t          j                            t	          | d                    d         a n	#  g a Y nxY wt          t                     dk    rd S t           D ]}|d         |k    r|c S d S )Nz	files.imgr\   r   id)	files_imgr+   r,   r-   r    len)r   ftfidr8   s       r   ftype_find_in_filesrn      s     	**4k+B+BCCINII	III
9~~t  T7c>>HHH  4s	   3= Ac                    t          | ||          }|r|d         |v r||d                  S d S |d         6t          j                            t	          | |                    d         |d<   |d         D ]}|d         |k    r|c S d S )Nfieldr6   r\   ri   )rn   r+   r,   r-   r    )r   rl   rm   r6   r8   s        r   ftype_find_in_imagerq      s    D"c**A g;!R[>!4	%yM&&tD#77	B5	Y  T7c>>HHH 4r   c                 >    t          | ||d          }|r|d         pdS )Nzreg-files.imgr   zunknown pathrq   )r   rl   rm   rfs       r   	ftype_regru      s)    	T2sO	<	<B"V*..r   c                 D    t          | ||d          }|rd|d         z  pdS )Nz	pipes.imgzpipe[%d]pipe_idzpipe[?]rs   )r   rl   rm   rB   s       r   
ftype_piperx      s.    D"c;77A*a	l*7i7r   c                     t          | ||d          }|sdS |d         rd|d         z  pd}d|d         |d         |fz  S )	Nz
unixsk.imgzunix[?]r   z %s zunix[%d (%d)%s]inopeerrs   )r   rl   rm   uxns        r   
ftype_unixr      sX    	T2sL	9	9B y
6
)ur&z)/RA5	2f:q999r   reg)getr6   rp   pipeusk)REGPIPEUNIXSKc                     d|d         |fz  S )Nz%s.%dtyprA   )r   rl   rm   s      r   	ftype_genr      s    bi%%%r   c                    |d         |d         f}t                               |d           }|sRt                              |d         t          |d         d          } |d         | ||d                   }|t           |<   |S )Ntyperi   )r   r   r   )files_cacher   
file_typesr   )r   fdkeyr8   rl   s        r   get_file_strr      s|    f:r$x
 CT""A ^^BvJ	"V*(M(MNNBuIdB4))CHr   c                 8   t           j                            t          | d                    }|d         D ]b}t	          |d          }t           j                            t          | d|z                      }|d         d         d         }t           j                            t          | d|z                      }t          d|z             |d         D ]*}t          d	|d
         t          | |          fz             +t           j                            t          | d|z                      d         d         }t          ddddt          | d|d         d                     t          ddddt          | d|d         d                     dd S )Nr[   r\   rH   z
ids-%s.imgr   files_idzfdinfo-%d.img%dz	%7d: %sr   z	fs-%d.img	cwdz>7z: r   cwd_idr   ri   rootroot_idr+   r,   r-   r    rD   r/   r   )r   rc   rB   rH   idifdtfdir   s           r   explore_fdsr      s   ]T< 8 899FI  !U##m  dL3,>!?!?@@)nQ
+m  dOc,A!B!BCCdSji. 	D 	DB+D<b+A+A BBCCCCm  dK#,=!>!>??	J1Muuul4H* *    	 	 	
 	vvv|DI+ +    	 	 	 	! r   c                       e Zd Zd Zd ZdS )vma_idc                 "    i | _         d| _        d S Nr&   )_vma_id__ids_vma_id__last)rL   s    r   rM   zvma_id.__init__   s    
r   c                     | j                             |d           }|s!| j        }| xj        dz  c_        || j         |<   |S r   )r   r   r   )rL   iidrets      r   r   z
vma_id.get   sF    jnnS$'' 	"+CKK1KK!DJsO
r   N)rN   rO   rP   rM   r   rA   r   r   r   r      s2              r   r   c                 b   t           j                            t          | d                    }t	                      }|d         D ]}t          |d          }t           j                            t          | d|z                      d         d         }t          d|z             t          ddd	d
t          | d|d         d                     |d         D ]Q}|d         }|dz  r"dd|                    |d                   z  z   }n|dz  r"dd|                    |d                   z  z   }n|dz  r"dd|                    |d                   z  z   }nj|dz  r=dt          | d|d         d          z   }|d         r|d|d         z  z  }|dz  r|dz  }n(|dz  rd}n |dz  rd }n|d!z  rd"}n|d#         dz  rd$}nd%}|d&z  s|d'z  }|d(         d&z  rd)pd*}	|	|d(         dz  rd+pd*z  }	|	|d(         dz  rd,pd*z  }	d-|d.         |d/         fz  }
t          d|
d	|	|           Sd S )0Nr[   r\   rH   	mm-%d.imgr   r   r   exe36z    r   exe_file_idr   vmasstatusi   rT   zips[%lx]shmid   z
shmem[%lx]i   zpacket[%lx]   pgoffz + %#lx   z (s)   z [stack]r'   z [vsyscall]   z [vdso]flagsz	 [stack?]rz   r&   z *protr-wxz%08lx-%08lxstartend)	r+   r,   r-   r    r   rD   r/   r   r   )r   rc   vidsrB   rH   mmivmastfnr   astrs              r   explore_memsr     s   ]T< 8 899F88DI /4 /4!U##m  dK#,=!>!>??	J1MdSj!-d-2+.}+=5# 5# "$ "$ "$% 	& 	& 	& v; $	4 $	4CXBW~ :W(>(>>>v <$((3w<*@*@@@w =488CL+A+AAA*+ <!g,/ /    w< 3)c'l22B= !&LBv 	v "v W&  = d
v;$,3DCK#%-#44DCK#%-#44D CL#e*#==DE444rr23333I$	4/4 /4r   c           
         t           j                            t          | d                    }|d         D ]}t	          |d          }t           j                            t          | d|z                      d         d         d         }t           j                            t          | d|z                      d         }t          d|z             d}d	}|d
d          D ]}d|d         |d         fz  }	||         d         |d         k    r|d
z  }||         d         |d         k    |d         |d         dz  z   }
d}||         d         |
k     r||         }||k    r|dz  }nN|d|d         |d         |d         z
  dz	  fz  z  }|d         dz  r|dt          | d|d         d          z   z  }|}|ddz  z  }|d
z  }||         d         |
k     |d
z  }t          |	d|           d S )Nr[   r\   rH   r   r   r   zpagemap-%d.imgr   r&   z	%lx / %-8dvaddrnr_pagesr      rz   r   z ~z %08lx / %-8dr   r   rT   r   r   r   z
	%23s24r   )r   rc   rB   rH   r   pmsvmipvmipmpstrpmevstrr   s                r   explore_rssr   <  sm   ]T< 8 899FI ", ",!U##}!!$t['*.+ #, #, - --6889;;ACm  d,<s,B!C!CDDYOdSjabb' 	, 	,B!R["Z.$AADs)E"bk11q s)E"bk11 W+J2!56CDs)G$s**3i$;;DLDDOGs5zCL'@R&G/I I ID8}(;< l4$)"%g,: : ' ' !  D
R'q s)G$s**  1HCtttTT*++++3	,", ",r   rd   fdsmemsrssc                 <    t          | d                  |            d S )Nwhat)	explorersr   s    r   explorer   k  s    d6lD!!!!!r   c                  p   d} t          j        | t           j                  }|                    d          }|                    dd          }|                    ddd	
           |                    ddd           |                    ddd           |                    t          d           |                    dd          }|                    ddd           |                    ddd           |                    t                     |                    dd          }|                    d           |                    t                     |                    dd          }|                    d           |                    dg d            |                    t                     |                    d!d"          }|                    d           |                    d#d$d	
           |                    t          d%d &           t          |                                          }|sdt          j                            |                                           t          j                            d'           t          j        d(            |d)         |           d S )*NzCRiu Image Tool)descriptionformatter_classz-Use crit CMD --help for command-specific help)helpr   z+convert criu image from binary type to jsonz--prettyzIMultiline with indents and some numerical fields in field-specific format
store_true)r   actionz-iz--inz<criu image in binary format to be decoded (stdin by default)z-oz--outz:where to put criu image in json format (stdout by default)F)funcr#   r;   z+convert criu image from json type to binaryz:criu image in json format to be encoded (stdin by default)z<where to put criu image in binary format (stdout by default))r   r=   zshow info about imager   r   zexplore image dirr   r   r   )choicesshowz5convert criu image from binary to human-readable jsonz--noplz%do not show entry payload (if exists)T)r   r"   r   zcrit: error: too few arguments
r&   r   )argparseArgumentParserRawTextHelpFormatteradd_subparsers
add_parseradd_argumentset_defaultsr   r;   r=   r   vars
parse_argsr
   r1   r5   format_usager2   )	descparser
subparsersdecode_parserencode_parserinfo_parserx_parsershow_parserr   s	            r   mainr   o  s;   D$(*GI I IF &&< ' > >J ))D * F FMS	    
 K  M M M I  K K K F777 ))D * F FMI  K K K K  M M M F+++ ''5L'MMKT"""$''' $$S/B$CCH%   &*F*F*FGGGw''' ''L ( N NKT"""X"I$0  2 2 2 &4@@@!!##$$D 
,,..///
;<<<DLr   __main__)r   )#
__future__r   r   r
   r3   r   r+   r   r   r    r   r;   r=   rD   rF   rW   rg   rj   rn   rq   ru   rx   r   r   r   r   r   r   r   r   r   r   r   r   rN   rA   r   r   <module>r      sq   % % % % % %  



  				 	  	  	 ! ! ! < < <  (/ / /  5 5 5       & & & &  0 	  &   / / /
8 8 8
: : :       
&& & &     2       24 24 24j$, $, $,P 	 	" " "B B BJ zDFFFFF r   