ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3

iG.                 @   sH  d dl Z d dlZd dlZd dlZd dlZddlmZ dd Zdd Zdd	 Z	d
d Z
dd Zdd Zdd ZG dd dZd9ddZdd Zdadd Zdd Zdd Zdd Zd d! Zedd"d#edd$d#edd%d#d&Zd'd( Zi Zd)d* Zd+d, ZG d-d. d.Zd/d0 Zd1d2 Zeeeed3Zd4d5 Z d6d7 Z!e"d8krDe!  dS ):    N   )__version__c             C   s2   | d rt | d dS tjj r&tjS tjjS d S )Ninrb)opensysstdinisattybuffer)opts r   /usr/lib/python3.6/__main__.pyinf   s
    
r   c             C   s8   | d r"d}|rd}t | d |S |r,tjS tjjS d S )Noutzwb+zw+)r   r   stdoutr
   )r   decodemoder   r   r   outf   s    r   c             C   s   t tjj| d |ddS )Ndirr   )r   )r   ospathjoin)r   namer   r   r   dinf#   s    r   c             C   s   d }y t jjt| | d | d }W nD t jjk
rh } z$td|j tjd tj	d W Y d d }~X nX | d rvd}t
| d}tj|||d |tjkr|jd	 d S )
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   ZMagicExceptionprintmagicr   stderrexitr   jsondumpr   write)r   r   imgexcfr   r   r   r   '   s     

r   c             C   sX   yt jt| }W n, tk
r>   tdtjd tjd Y nX tj	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)r'   r"   r   UnicodeDecodeErrorr#   r   r%   r&   r    r!   r(   r   )r   r*   r   r   r   encode;   s    
r.   c             C   s,   t jjt| }tj|tjdd t  d S )Nr   )r   )	r    r!   infor   r'   r(   r   r   r#   )r   Zinfsr   r   r   r/   F   s    r/   c             C   s    || kr| | S | d|  d S )NZns_r   r   )pvalr   r   r   get_task_idL   s    r2   c               @   s   e Zd Zdd ZdS )ps_itemc             C   s,   t |d| _|d | _|| _|| _g | _d S )Npidppid)r2   r4   r5   r0   corekids)selfr0   r6   r   r   r   __init__V   s
    
zps_item.__init__N)__name__
__module____qualname__r9   r   r   r   r   r3   U   s   r3   c             C   s^   t d| jt| jdt| jddd|  | jd d f  x| jD ]}t|||d  qBW d S )	Nz%7d%7d%7d   %s%sZpgidZsid r   ZtcZcommr   )r#   r4   r2   r0   r6   r7   show_ps)r0   r   depthZkidr   r   r   r>   ^   s
    r>   c       	      C   s   i }t jjt| d}xH|d D ]<}t jjt| dt|d }t||d d }|||j< q W d }x:|D ]2}|| }|jdkr|}qj||j }|jj	| qjW t
dd  t||  d S )Nz
pstree.imgentrieszcore-%d.imgr4   r   z%7s%7s%7s   %sPIDPGIDSIDCOMM)rA   rB   rC   rD   )r    r!   r"   r   r2   r3   r4   r5   r7   appendr#   r>   )	r   Zpssps_imgr0   r6   psZpsrr4   Zppr   r   r   
explore_psf   s"    


rH   c             C   sn   t d kr<ytjjt| dd a W n tk
r:   g a Y nX tt dkrLd S xt D ]}|d |krR|S qRW d S )Nz	files.imgr@   r   id)	files_imgr    r!   r"   r   	Exceptionlen)r   ftfidr,   r   r   r   ftype_find_in_files   s    

rO   c             C   sx   t | ||}|r,|d |kr(||d  S d S |d d krRtjjt| |d |d< x |d D ]}|d |kr\|S q\W d S )Nfieldr*   r@   rI   )rO   r    r!   r"   r   )r   rM   rN   r*   r,   r   r   r   ftype_find_in_image   s    rQ   c             C   s   t | ||d}|r|d pdS )Nzreg-files.imgr   zunknown path)rQ   )r   rM   rN   Zrfr   r   r   	ftype_reg   s    rR   c             C   s"   t | ||d}|rd|d  p dS )Nz	pipes.imgzpipe[%d]Zpipe_idzpipe[?])rQ   )r   rM   rN   r0   r   r   r   
ftype_pipe   s    rS   c             C   sD   t | ||d}|sdS |d r*d|d  p,d}d|d |d |f S )	Nz
unixsk.imgzunix[?]r   z %s zunix[%d (%d)%s]ZinoZpeer)rQ   )r   rM   rN   Zuxnr   r   r   
ftype_unix   s
    rV   Zreg)getr*   rP   pipeZusk)REGPIPEZUNIXSKc             C   s   d|d |f S )Nz%s.%dtypr   )r   rM   rN   r   r   r   	ftype_gen   s    r\   c             C   sZ   |d |d f}t j|d }|sVtj|d t|d d}|d | ||d }|t |< |S )NtyperI   )rW   r[   rW   )files_cacherW   
file_typesr\   )r   fdkeyr,   rM   r   r   r   get_file_str   s    rb   c          	   C   s  t jjt| d}x|d D ]}t|d}t jjt| d| }|d d d }t jjt| d| }td|  x*|d D ]}td	|d
 t| |f  q|W t jjt| d| d d }tddt| d|d df  tddt| d|d df  qW d S )Nz
pstree.imgr@   r4   z
ids-%s.imgr   Zfiles_idzfdinfo-%d.imgz%dz	%7d: %sr`   z	fs-%d.imgz	%7s: %scwdrY   Zcwd_id)r]   rI   rootZroot_id)r    r!   r"   r   r2   r#   rb   )r   rF   r0   r4   ZidiZfdtZfdir`   r   r   r   explore_fds   s$    
re   c               @   s   e Zd Zdd Zdd ZdS )vma_idc             C   s   i | _ d| _d S )Nr   )_vma_id__ids_vma_id__last)r8   r   r   r   r9      s    zvma_id.__init__c             C   s4   | j j|d }|s0| j}|  jd7  _|| j |< |S )Nr   )rg   rW   rh   )r8   Ziidretr   r   r   rW      s    
z
vma_id.getN)r:   r;   r<   r9   rW   r   r   r   r   rf      s   rf   c          	   C   s&  t jjt| d}t }x|d D ]}t|d}t jjt| d| d d }td|  tddt| d	|d
 df  x|d D ]}|d }|d0@ rdd|j|d   }n|d1@ rdd|j|d   }n|d2@  rdd|j|d   }n|d5@ rJdt| d	|d d }|d r6|d|d  7 }|d6@ r|d7 }nH|d7@ rZd}n8|d8@ rjd}n(|d9@ rzd }n|d! d"@ rd#}nd$}|d:@ s|d%7 }|d& d@ rd'pd(}	|	|d& d@ rd)pd(7 }	|	|d& d*@ rd+pd(7 }	d,|d- |d. f }
td/|
|	|f  qW q$W d S );Nz
pstree.imgr@   r4   z	mm-%d.imgr   z%dz	%-36s    %sZexerY   Zexe_file_id)r]   rI   vmasstatusr   
   r=   zips[%lx]shmid   z
shmem[%lx]   zpacket[%lx]      Zpgoffz + %#lxz (s)z [stack]   z [vsyscall]   z [vdso]flags   z	 [stack?]rT   z *protr-wr   xz%08lx-%08lxstartendz
	%-36s%s%si   ru   i   @         r~   rr   r   rn   r   )	r    r!   r"   r   rf   r2   r#   rb   rW   )r   rF   Zvidsr0   r4   Zmmivmastfnrv   Zastrr   r   r   explore_mems  sT    









r   c          	   C   s  t jjt| d}x|d D ]}t|d}t jjt| d| d d d }t jjt| d| d }td|  d}d}x0|d	d  D ]}d
|d |d f }	x,|t|k r|| d |d kr|d	7 }qW |d |d d>  }
d}x|t|k r|| d |
k r|| }||kr,|d7 }nR|d|d |d |d  d? f 7 }|d d@ rz|dt| d|d d 7 }|}|dd 7 }|d	7 }qW |d	8 }td|	|f  qW qW d S ) Nz
pstree.imgr@   r4   z	mm-%d.imgr   rj   zpagemap-%d.imgz%dr   z	%lx / %-8dZvaddrZnr_pagesr|      rT   r{   z ~z %08lx / %-8drk   rp   rq   r=   rY   rm   )r]   rI   z
	%23sz%-24s%sr}   r~   r   )r    r!   r"   r   r2   r#   rL   rb   )r   rF   r0   r4   rj   ZpmsZvmiZpvmiZpmZpstrZpmeZvstrr   r   r   r   explore_rss9  s<    
""

 r   )rG   fdsmemsrssc             C   s   t | d  |  d S )Nwhat)	explorers)r   r   r   r   exploreh  s    r   c        	      C   s  d} t j| t jd}|jddtd |jdd}|jdd	d}|jd
ddd |jdddd |jdddd |jtdd |jddd}|jdddd |jdddd |jt	d |jddd}|jd |jt
d |jddd}|jd  |jd!d"d#d$d%gd& |jtd |jd'd(d}|jd |jd)d*dd |jtd+d d, t|j }|stjj|j  tjjd- tjd. |d/ | d S )0NzCRiu Image Tool)descriptionZ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   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   rz   zexplore image dirr   r   rG   r   r   r   )choicesZ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ArgumentParserZRawTextHelpFormatteradd_argumentr   Zadd_subparsersZ
add_parserZset_defaultsr   r.   r/   r   vars
parse_argsr   r%   r)   Zformat_usager&   )	ZdescparserZ
subparsersZdecode_parserZencode_parserZinfo_parserZx_parserZshow_parserr   r   r   r   mainl  sh    






r   __main__)r   )#r   r   r'   r   r    rT   r   r   r   r   r   r.   r/   r2   r3   r>   rH   rJ   rO   rQ   rR   rS   rV   r_   r\   r^   rb   re   rf   r   r   r   r   r   r:   r   r   r   r   <module>   sZ   
		
5(E
