
    hG.                     8   S SK r S SKrS SKrS SKrS SKrSSKJr  S rS rS r	S r
S rS	 rS
 r " S S5      rS$S jrS rSqS rS rS rS rS r\SSS.\SSS.\SSS.S.rS r0 rS rS r " S S5      rS rS r\\\\S .rS! r S" r!\"S#:X  a  \!" 5         gg)%    N   )__version__c                     U S   (       a  [        U S   S5      $ [        R                  R                  5       (       a  [        R                  $ [        R                  R                  $ )Ninrb)opensysstdinisattybufferoptss    //usr/lib/python3/dist-packages/crit/__main__.pyinfr      sG    DzDJ%%9999yy    c                     U S   (       a  SnU(       a  Sn[        U S   U5      $ U(       a  [        R                  $ [        R                  R                  $ )Noutzwb+zw+)r   r	   stdoutr   )r   decodemodes      r   outfr      sF     E{DDK&&::zz   r   c                 X    [        [        R                  R                  U S   U5      SS9$ )Ndirr   )r   )r   ospathjoin)r   names     r   dinfr   #   s"    T%[$/d;;r   c                    S n [         R                  R                  [        U 5      U S   U S   5      nU S   (       a  Sn[        U S5      n[        R                  " WXAS9  U[        R                  :X  a  UR                  S	5        g g ! [         R                  R                   aE  n[        SUR                  -  [        R                  S9  [        R                  " S5         S nANS nAff = f)
NprettynoplzSUnknown magic %#x.
Maybe you are feeding me an image with raw data(i.e. pages.img)?filer      Tindent
)pycriuimagesloadr   MagicExceptionprintmagicr	   stderrexitr   jsondumpr   write)r   r&   imgexcfs        r   r   r   '   s    Fmm  TDNDLI H~T4AIIc1$CJJ	  ==''  *,/II6<?JJ	H 		s   0B C+&;C&&C+c                     [         R                  " [        U 5      5      n[        R                  R                  W[        U S5      5        g ! [         a1    [	        S[
        R                  S9  [
        R                  " S5         Nef = f)NzbCannot read JSON.
Maybe you are feeding me an image with protobuf data? Encode expects JSON input.r"   r   F)r0   r*   r   UnicodeDecodeErrorr,   r	   r.   r/   r(   r)   r1   r   )r   r3   s     r   encoder8   ;   sh    iiD	" MMsDu-.   +14	= 		s   A 8BBc                     [         R                  R                  [        U 5      5      n[        R
                  " U[        R                  SS9  [        5         g )Nr$   r%   )	r(   r)   infor   r0   r1   r	   r   r,   )r   infss     r   r:   r:   F   s3    ==c$i(DIIdCJJq)	Gr   c                 *    X;   a  X   $ U SU-      S   $ )Nns_r    )pvals     r   get_task_idrA   L   s     X1641US[>!#44r   c                       \ rS rSrS rSrg)ps_itemU   c                 `    [        US5      U l        US   U l        Xl        X l        / U l        g )Npidppid)rA   rF   rG   r?   corekids)selfr?   rH   s      r   __init__ps_item.__init__V   s,    q%(fI			r   )rH   rI   r?   rF   rG   N)__name__
__module____qualname____firstlineno__rK   __static_attributes__r>   r   r   rC   rC   U   s    r   rC   c           	          [        SU R                  [        U R                  S5      [        U R                  S5      SSU-  -  U R                  S   S   4-  5        U R
                   H  n[        X1US-   5        M     g )	Nz%7d%7d%7d   %s%spgidsid r$   tccommr   )r,   rF   rA   r?   rH   rI   show_ps)r?   r   depthkids       r   rX   rX   ^   su    	
55+acc6*KU,CSIFtV,.. / vv519% r   c                    0 n[         R                  R                  [        U S5      5      nUS    HX  n[         R                  R                  [        U S[	        US5      -  5      5      n[        X4S   S   5      nXQUR                  '   MZ     S nU HD  nX   nUR                  S:X  a  UnM  XR                     nUR                  R                  U5        MF     [        SS-  5        [        X`5        g )N
pstree.imgentrieszcore-%d.imgrF   r   z%7s%7s%7s   %s)PIDPGIDSIDCOMM)r(   r)   r*   r   rA   rC   rF   rG   rI   appendr,   rX   )	r   pssps_imgr?   rH   pspsrrF   pps	            r   
explore_psrh   f   s    
C]]T< 89FI}}!!}{1e'<<=?QY*+BFF	  CH66Q;C[
q  

;
;<Cr   c                     [         c-   [        R                  R                  [	        U S5      5      S   q [        [         5      S:X  a  g [          H  nUS   U:X  d  M  Us  $    g ! [
         a    / q  N=f = f)Nz	files.imgr]   r   id)	files_imgr(   r)   r*   r   	Exceptionlen)r   ftfidr5   s       r   ftype_find_in_filesrp      su     	**4k+BCINI 9~T7c>H    	I	s   ,A$ $A32A3c                     [        XU5      nU(       a  US   U;   a  XAS      $ g US   c.  [        R                  R                  [	        X5      5      S   US'   US    H  nUS   U:X  d  M  Us  $    g )Nfieldr3   r]   rj   )rp   r(   r)   r*   r   )r   rn   ro   r3   r5   s        r   ftype_find_in_imagers      sz    Dc*Ag;![>!	%yMM&&tD7	B5	YT7c>H  r   c                 J    [        XUS5      nU=(       a    US   =(       d    S$ )Nzreg-files.imgr   zunknown pathrs   )r   rn   ro   rfs       r   	ftype_regrw      s$    	TsO	<B"V*..r   c                 P    [        XUS5      nU=(       a    SUS   -  =(       d    S$ )Nz	pipes.imgzpipe[%d]pipe_idzpipe[?]ru   )r   rn   ro   r?   s       r   
ftype_piperz      s)    Dc;7A*a	l*7i7r   c                     [        XUS5      nU(       d  gUS   =(       a    SUS   -  =(       d    SnSUS   US   U4-  $ )	Nz
unixsk.imgzunix[?]r   z %s zunix[%d (%d)%s]inopeerru   )r   rn   ro   uxns        r   
ftype_unixr      sL    	TsL	9B
6
)ur&z)/RA5	2f:q999r   reg)getr3   rr   pipeusk)REGPIPEUNIXSKc                     SUS   U4-  $ )Nz%s.%dtypr>   )r   rn   ro   s      r   	ftype_genr      s    bi%%%r   c                     US   US   4n[         R                  US 5      nU(       d;  [        R                  US   [        US   S.5      nUS   " XUS   5      nU[         U'   U$ )Ntyperj   )r   r   r   )files_cacher   
file_typesr   )r   fdkeyr5   rn   s        r   get_file_strr      sg    f:r$x
 CT"A^^BvJ	"V*(MNuId4)CHr   c                    [         R                  R                  [        U S5      5      nUS    GH#  n[	        US5      n[         R                  R                  [        U SU-  5      5      nUS   S   S   n[         R                  R                  [        U SU-  5      5      n[        SU-  5        US    H  n[        S	US
   [        X5      4-  5        M!     [         R                  R                  [        U SU-  5      5      S   S   n[        SS<S S[        U SUS   S.5      < 35        [        SS<S S[        U SUS   S.5      < 35        GM&     g )Nr\   r]   rF   z
ids-%s.imgr   files_idzfdinfo-%d.img%dz	%7d: %sr   z	fs-%d.img	cwdz>7z: r   cwd_idr   rj   rootroot_id)r(   r)   r*   r   rA   r,   r   )r   rd   r?   rF   idifdtfdir   s           r   explore_fdsr      s>   ]]T< 89FI!U#mm  dL3,>!?@)nQ
+mm  dOc,A!BCdSji.B+D<+A BBC ! mm  dK#,=!>?	J1Ml4H*  	
 	|DI+  	! r   c                        \ rS rSrS rS rSrg)vma_id   c                      0 U l         SU l        g Nr   )_vma_id__ids_vma_id__last)rJ   s    r   rK   vma_id.__init__   s    
r   c                     U R                   R                  US 5      nU(       d/  U R                  nU =R                  S-  sl        X R                   U'   U$ r   )r   r   r   )rJ   iidrets      r   r   
vma_id.get   s@    jjnnS$'++CKK1K!JJsO
r   )__ids__lastN)rM   rN   rO   rP   rK   r   rQ   r>   r   r   r   r      s    r   r   c                 l   [         R                  R                  [        U S5      5      n[	        5       nUS    GH  n[        US5      n[         R                  R                  [        U SU-  5      5      S   S   n[        SU-  5        [        SS<S	 S
[        U SUS   S.5      < 35        US    GHy  nUS   nUS-  (       a  SSUR                  US   5      -  -   nOUS-  (       a  SSUR                  US   5      -  -   nOUS-  (       a  SSUR                  US   5      -  -   nO}US-  (       a:  S[        U SUS   S.5      -   nUS   (       a  USUS   -  -  nUS-  (       a  US-  nO9US-  (       a  SnO,US-  (       a  S nOUS!-  (       a  S"nOUS#   S-  (       a  S$nOS%nUS&-  (       d  US'-  nUS(   S&-  =(       a    S)=(       d    S*n	XS(   S-  =(       a    S+=(       d    S*-  n	XS(   S-  =(       a    S,=(       d    S*-  n	S-US.   US/   4-  n
[        SU
<S	 U	< U< 35        GM|     GM     g )0Nr\   r]   rF   	mm-%d.imgr   r   r   exe36z    r   exe_file_idr   vmasstatusi   rU   zips[%lx]shmid   z
shmem[%lx]i   zpacket[%lx]   pgoffz + %#lx   z (s)   z [stack]r$   z [vsyscall]   z [vdso]flagsz	 [stack?]r|   r   z *protr-wxz%08lx-%08lxstartend)	r(   r)   r*   r   r   rA   r,   r   r   )r   rd   vidsr?   rF   mmivmastfnr   astrs              r   explore_memsr     s7   ]]T< 89F8DI!U#mm  dK#,=!>?	J1MdSj!-d-2+.}+=5# "$% 	& v;CXBW~:W(>>>v<$((3w<*@@@w=488CL+AAA*+<!g,/   w<)c'l22B=&LBvv"vW& =d
v;$,3DK#%-#44DK#%-#44D CL#e*#==D4r23I  r   c           
         [         R                  R                  [        U S5      5      nUS    GH  n[	        US5      n[         R                  R                  [        U SU-  5      5      S   S   S   n[         R                  R                  [        U SU-  5      5      S   n[        SU-  5        SnS	nUS
S   GH  nSUS   US   4-  n	U[        U5      :  a2  XF   S   US   ::  a$  US
-  nU[        U5      :  a  XF   S   US   ::  a  M$  US   US   S-  -   n
SnU[        U5      :  a  XF   S   U
:  ax  XF   nXg:X  a  US-  nO@USUS   US   US   -
  S-	  4-  -  nUS   S-  (       a  US[        U SUS   S.5      -   -  nUnUSS-  -  nUS
-  nU[        U5      :  a  XF   S   U
:  a  Mx  US
-  n[        U	<S U< 35        GM     GM     g )Nr\   r]   rF   r   r   r   zpagemap-%d.imgr   r   z	%lx / %-8dvaddrnr_pagesr      r|   r   z ~z %08lx / %-8dr   r   rU   r   r   r   z
	%23s24)r(   r)   r*   r   rA   r,   rm   r   )r   rd   r?   rF   r   pmsvmipvmipmpstrpmevstrr   s                r   explore_rssr   9  s'   ]]T< 89FI!U#}}!!$t['*.+ #, --6889;;ACmm  d,<s,B!CDYOdSjab'B!R["Z.$AADD	/di&6"W+&Eq D	/di&6"W+&E W+J2!56CDD	/di&83&>i;DLDOGs5zCL'@R&G/I I ID8}(;<l4$)"%g,: ' !  D
R'q D	/di&83&>  1HCtT*+3  r   re   fdsmemsrssc                 (    [         U S      " U 5        g )Nwhat)	explorersr   s    r   explorer   h  s    d6lD!r   c                  j   Sn [         R                  " U [         R                  S9nUR                  SS[        S9  UR                  SS9nUR                  SS	S9nUR                  S
SSS9  UR                  SSSS9  UR                  SSSS9  UR                  [        SS9  UR                  SSS9nUR                  SSSS9  UR                  SSSS9  UR                  [        S9  UR                  SSS9nUR                  S5        UR                  [        S9  UR                  SSS9nUR                  S 5        UR                  S!/ S"QS#9  UR                  [        S9  UR                  S$S%S9nUR                  S5        UR                  S&S'SS9  UR                  [        S(S S)9  [        UR                  5       5      nU(       db  [        R                  R!                  UR#                  5       5        [        R                  R!                  S*5        [        R$                  " S+5        US,   " U5        g )-NzCRiu Image Tool)descriptionformatter_classz	--versionversion)actionr   z-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   r   z-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!   r8   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_argumentr   add_subparsers
add_parserset_defaultsr   r8   r:   r   vars
parse_argsr	   r.   r2   format_usager/   )	descparser
subparsersdecode_parserencode_parserinfo_parserx_parsershow_parserr   s	            r   mainr   l  s   D$$(*G*GIF
I{K&&< ' >J ))D * FMX   K  M I  K F7 ))D * FMI  K K  M F+ ''5L'MKT"$' $$S/B$CH% &*FGw' ''L ( NKT"X"I$0  2 &4@!!#$D

,,./

;<Lr   __main__)r   )#r   r	   r0   r   r(   r|   r   r   r   r   r   r8   r:   rA   rC   rX   rh   rk   rp   rs   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   rM   r>   r   r   <module>r      s    
  	   !<(/5 &0 	& /
8
:   
&& 2 24j$,P 		"BJ zF r   