????
Your IP : 3.144.45.224
a
k�x]�*�@sHddlmZddlZddlZddlZddlZddlZdd�Zdd�Zdd�Z d d
�Z
dd�Zd
d�Zdd�Z
Gdd�d�Zd8dd�Zdd�Zdadd�Zdd�Zdd�Zdd�Zdd �Zedd!d"�edd#d"�edd$d"�d%�Zd&d'�ZiZd(d)�Zd*d+�ZGd,d-�d-�Zd.d/�Zd0d1�Zeeeed2�Zd3d4�Z d5d6�Z!e"d7k�rDe!�dS)9�)�print_functionNcCs |drt|dd�StjSdS)N�in�rb)�open�sys�stdin��opts�r
�./usr/lib/python3.9/site-packages/pycriu/cli.py�inf
srcCs |drt|dd�StjSdS)N�outzw+)rr�stdoutrr
r
r�outfsrcCsttj�|d|��S)N�dir)r�os�path�join)r �namer
r
r�dinfsrc
Cs�d}z tj�t|�|d|d�}WnFtjjyj}z*td|jtjd�t� d�WYd}~n
d}~00|drxd}t
|�}tj|||d�|tj
kr�|�d�dS) N�pretty�noplzSUnknown magic %#x.
Maybe you are feeding me an image with raw data(i.e. pages.img)?)�file����indent�
)�pycriu�images�loadrZMagicException�print�magicr�stderr�exitr�json�dumpr�write)r r�img�exc�fr
r
r�decodes ��
r+cCs$t�t|��}tj�|t|��dS)N)r%r rrrr&r)r r(r
r
r�encode0sr,cCs,tj�t|��}tj|tjdd�t�dS)Nrr) rr�inforr%r&rrr!)r Zinfsr
r
rr-5sr-cCs ||vr||S|d|dS)NZns_rr
)�p�valr
r
r�get_task_id;sr0c@seZdZdd�ZdS)�ps_itemcCs,t|d�|_|d|_||_||_g|_dS)N�pid�ppid)r0r2r3r.�core�kids)�selfr.r4r
r
r�__init__Es
zps_item.__init__N)�__name__�
__module__�__qualname__r7r
r
r
rr1Dsr1cCsZtd|jt|jd�t|jd�dd||jddf�|jD]}t|||d�q@dS) Nz%7d%7d%7d %s%sZpgidZsid� rZtcZcommr)r!r2r0r.r4r5�show_ps)r.r �depthZkidr
r
rr<Ms���
r<c Cs�i}tj�t|d��}|dD]<}tj�t|dt|d���}t||dd�}|||j<qd}|D]2}||}|jdkr�|}qd||j}|j� |�qdt
dd�t||�dS)N�
pstree.img�entrieszcore-%d.imgr2rz%7s%7s%7s %s)ZPIDZPGIDZSIDZCOMM)rrr rr0r1r2r3r5�appendr!r<) r Zpss�ps_imgr.r4�psZpsrr2�ppr
r
r�
explore_psUs$�
rDcCsftdur4ztj�t|d��daWngaYn0tt�dkrDdStD]}|d|krH|SqHdS)Nz files.imgr?r�id)� files_imgrrr r�len)r �ft�fidr*r
r
r�ftype_find_in_filesps
rJcCsht|||�}|r||dS|ddkrBtj�t||��d|d<|dD]}|d|krJ|SqJdS)N�fieldr(r?rE)rJrrr r)r rHrIr(r*r
r
r�ftype_find_in_image�s
rLcCst|||d�}|r|dpdS)Nz
reg-files.imgrzunknown path�rL)r rHrIZrfr
r
r� ftype_reg�srNcCs"t|||d�}|rd|dp dS)Nz pipes.imgzpipe[%d]Zpipe_idzpipe[?]rM)r rHrIr.r
r
r�
ftype_pipe�srOcCsDt|||d�}|sdS|dr*d|dp,d}d|d|d|fS) Nz
unixsk.imgzunix[?]rz %s�zunix[%d (%d)%s]�inoZpeerrM)r rHrIZux�nr
r
r�
ftype_unix�s
rSZreg)�getr(rK�pipeZusk)�REG�PIPEZUNIXSKcCsd|d|fS)Nz%s.%d�typr
)r rHrIr
r
r� ftype_gen�srYcCsZ|d|df}t�|d�}|sVt�|dt|dd��}|d|||d�}|t|<|S)N�typerE)rTrXrT)�files_cacherT�
file_typesrY)r �fd�keyr*rHr
r
r�get_file_str�sr_c Cs�tj�t|d��}|dD]�}t|d�}tj�t|d|��}|ddd}tj�t|d|��}td|�|dD]}td |d
t||�f�qxtj�t|d|��dd}tdd
t|d|dd��f�tddt|d|dd��f�qdS)Nr>r?r2z
ids-%s.imgrZfiles_idz
fdinfo-%d.img�%dz %7d: %sr]z fs-%d.imgz %7s: %s�cwdrVZcwd_id�rZrE�rootZroot_id�rrr rr0r!r_)r rAr.r2ZidiZfdtZfdir]r
r
r�explore_fds�s,
����rec@seZdZdd�Zdd�ZdS)�vma_idcCsi|_d|_dS�Nr)�_vma_id__ids�
_vma_id__last)r6r
r
rr7�szvma_id.__init__cCs4|j�|d�}|s0|j}|jd7_||j|<|Srg)rhrTri)r6Ziid�retr
r
rrT�s
z
vma_id.getN)r8r9r:r7rTr
r
r
rrf�srfc Cstj�t|d��}t�}|dD�]�}t|d�}tj�t|d|��dd}td|�tddt|d |d
d��f�|dD�]�}|d
}|d@r�dd|�|d�}n�|d@r�dd|�|d�}n�|d@r�dd|�|d�}n�|d@�r@dt|d |dd��}|d�r,|d|d7}|d@�r�|d7}nH|d@�rPd}n8|d@�r`d}n(|d@�rpd }n|d!d@�r�d"}nd#}|d$@�s�|d%7}|d&d$@�r�d'�p�d(} | |d&d@�r�d)�p�d(7} | |d&d@�r�d*�p�d(7} d+|d,|d-f}
td.|
| |f�q�q dS)/Nr>r?r2� mm-%d.imgrr`z %-36s %sZexerVZexe_file_idrb�vmas�statusir;zips[%lx]�shmid�z
shmem[%lx]izpacket[%lx]�Zpgoffz + %#lx�z (s)�z [stack]rz [vsyscall]�z [vdso]�flagsz [stack?]rPrz *�prot�r�-�w�xz%08lx-%08lx�start�endz
%-36s%s%s) rrr rrfr0r!r_rT)r rAZvidsr.r2Zmmi�vma�st�fnruZastrr
r
r�explore_mems�sZ
��
�
rc
Cs�tj�t|d��}|dD�]h}t|d�}tj�t|d|��ddd}tj�t|d|��d}td|�d}d }|d
d�D]�}d|d|d
f} ||d|dkr�|d
7}q�|d|d
d>}
d}||d|
k�rj||}||k�r|d7}nR|d|d|d|dd?f7}|dd@�rP|dt|d|dd��7}|}|dd7}|d
7}q�|d
8}td| |f�q�qdS)Nr>r?r2rkrrlzpagemap-%d.imgr`���rz %lx / %-8dZvaddrZnr_pagesr{�rPrzz ~z
%08lx / %-8drmrpr;rVrnrbz
%23sz%-24s%srd)
r rAr.r2rlZpmsZvmiZpvmiZpmZpstrZpmeZvstrr|r
r
r�explore_rss%sN
����
��
r��rBZfdsZmemsZrsscCst|d|�dS)N�what)� explorersrr
r
r�exploreTsr�c Cs�d}tj|tjd�}|jdd�}|jddd�}|jddd d
�|jddd
d�|jdddd�|jtdd�|jddd�}|jdddd�|jdddd�|jtd�|jddd�}|�d�|jt d�|jddd�}|�d�|jdgd�d �|jt
d�|jd!d"d�}|�d�|jd#d$d d
�|jtd%dd&�t|���}|�spt
j�|���t
j�d'�t
�d(�|d)|�dS)*NzCRiu 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)�funcrr,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-zshow info about imagerryzexplore image dirrr�r�)�choicesZshowz5convert criu image from binary to human-readable jsonz--noplz%do not show entry payload (if exists)T)r�rr
zcrit: error: too few arguments
rr�)�argparse�ArgumentParser�RawTextHelpFormatter�add_subparsers�
add_parser�add_argument�set_defaultsr+r,r-r��vars�
parse_argsrr#r'�format_usager$) Zdesc�parserZ
subparsersZ
decode_parserZ
encode_parserZinfo_parserZx_parserZshow_parserr r
r
r�mainXs|���������
�
�
r��__main__)r)#Z
__future__rr�rr%rrrrrr+r,r-r0r1r<rDrFrJrLrNrOrSr\rYr[r_rerfrr�r�r�r�r8r
r
r
r�<module>sd
����5(�E