o
    �õ±jÖ   ã                   @   sZ   d dl Z d dlT G dd„ dƒZG dd„ dƒZG dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZdS )é    N)Ú*c                   @   sP   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zed	d
„ ƒZdd„ Z	dd„ Z
dS )ÚMinidumpModulec                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S ©N)ÚnameÚbaseaddressÚsizeÚ
endaddressÚversioninfoÚchecksumÚ	timestamp©Úself© r   ú”/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/ModuleListStream.pyÚ__init__
   s   
zMinidumpModule.__init__c                 C   sP   t ƒ }| j|_| j|_| j|_| j|_t	 
| j|¡|_| j|_|j|j |_|S )ú.
		mod: MINIDUMP_MODULE
		buff: file handle
		)r   ÚBaseOfImager   ÚSizeOfImager   ÚCheckSumr
   ÚTimeDateStampr   ÚMINIDUMP_STRINGÚget_from_rvaÚModuleNameRvar   ÚVersionInfor	   r   ©ÚmodÚbuffÚmmr   r   r   Úparse   s   zMinidumpModule.parsec                 Ã   sX   �t ƒ }| j|_| j|_| j|_| j|_t	 
| j|¡I dH |_| j|_|j|j |_|S )r   N)r   r   r   r   r   r   r
   r   r   r   Úaget_from_rvar   r   r   r	   r   r   r   r   r   Úaparse$   s   €zMinidumpModule.aparsec                 C   s   | j |  ko| jk S   S r   )r   r   )r   Ú
memory_locr   r   r   Úinrange4   ó   zMinidumpModule.inrangec                   C   s   g d¢S )N)zModule nameÚBaseAddressÚSizeÚ
EndaddressÚ	Timestampr   r   r   r   r   Ú
get_header7   s   zMinidumpModule.get_headerc                 C   s,   t | jƒd| j t| jƒd| j d| j gS )Nz0x%08x)Ústrr   r   Úhexr   r   r   r   r   r   r   Úto_rowA   s   ûzMinidumpModule.to_rowc                 C   s   d| j | j| j| jf S )NzAModule name: %s BaseAddress: 0x%08x Size: 0x%x Endaddress: 0x%08x)r   r   r   r   r   r   r   r   Ú__str__K   ó   zMinidumpModule.__str__N)Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r    r"   r(   r+   r,   r   r   r   r   r   	   s    



	
r   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZdd„ Z	dS )ÚVS_FIXEDFILEINFOc                 C   sR   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d S r   )ÚdwSignatureÚdwStrucVersionÚdwFileVersionMSÚdwFileVersionLSÚdwProductVersionMSÚdwProductVersionLSÚdwFileFlagsMaskÚdwFileFlagsÚdwFileOSÚ
dwFileTypeÚdwFileSubtypeÚdwFileDateMSÚdwFileDateLSr   r   r   r   r   P   s   
zVS_FIXEDFILEINFO.__init__c                 C   s   dS )Né4   r   r   r   r   r   Úget_size_   s   zVS_FIXEDFILEINFO.get_sizec                 C   s  | j jdddd�}|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| j	jdddd�7 }|| j
jdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|S ©Né   ÚlittleF©Ú	byteorderÚsigned)r3   Úto_bytesr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   ©r   Útr   r   r   rH   b   s   zVS_FIXEDFILEINFO.to_bytesc                 C   s   t  t | ¡¡S r   )r2   r   ÚioÚBytesIO)Údatar   r   r   Ú
from_bytesr   s   zVS_FIXEDFILEINFO.from_bytesc                 C   sB  t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	tj|  d¡ddd�|_
tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|S rB   )r2   ÚintrN   Úreadr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   )r   Úvfr   r   r   r   v   s   zVS_FIXEDFILEINFO.parsec                 C   ó.   d}| j D ]}|d|t| j | ƒf 7 }q|S ©NÚ z	%s : %s
©Ú__dict__r)   ©r   rJ   Úkr   r   r   r,   ˆ   ó   
zVS_FIXEDFILEINFO.__str__N)
r.   r/   r0   r   rA   rH   r1   rN   r   r,   r   r   r   r   r2   O   s    

r2   c                   @   s8   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	d
„ ZdS )ÚMINIDUMP_MODULEc                 C   sF   d | _ d | _d| _d | _d | _d | _d | _d | _d| _d| _	d | _
d S )Nr   )r   r   r   r   r   r   ÚCvRecordÚ
MiscRecordÚ	Reserved0Ú	Reserved1Ú
ModuleNamer   r   r   r   r   �   s   
zMINIDUMP_MODULE.__init__c                 C   s   dt ƒ  ¡  dtƒ  ¡   S )Né(   é   )r2   rA   ÚMINIDUMP_LOCATION_DESCRIPTORr   r   r   r   rA   Ÿ   r#   zMINIDUMP_MODULE.get_sizec                 C   sÄ   | j jdddd�}|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| j ¡ 7 }|| j ¡ 7 }|| j ¡ 7 }|| j	jdddd�7 }|| j
jdddd�7 }|S ©Né   rD   FrE   rC   )r   rH   r   r   r   r   r   r[   r\   r]   r^   rI   r   r   r   rH   ¢   s   zMINIDUMP_MODULE.to_bytesc                 C   sÖ   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_t	 
| ¡|_t 
| ¡|_t 
| ¡|_tj|  d¡ddd�|_tj|  d¡ddd�|_|S rc   )rZ   rO   rN   rP   r   r   r   r   r   r2   r   r   rb   r[   r\   r]   r^   )r   r   r   r   r   r   ¯   s   zMINIDUMP_MODULE.parsec                 C   rR   rS   rU   rW   r   r   r   r,   ¾   rY   zMINIDUMP_MODULE.__str__N)	r.   r/   r0   r   rA   rH   r1   r   r,   r   r   r   r   rZ   �   s    
rZ   c                   @   s0   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	S )
ÚMINIDUMP_MODULE_LISTc                 C   s   d | _ g | _d S r   )ÚNumberOfModulesÚModulesr   r   r   r   r   Æ   s   
zMINIDUMP_MODULE_LIST.__init__c                 C   s   dt | jƒtƒ  ¡   S )NrC   )Úlenrg   rZ   rA   r   r   r   r   rA   Ê   r-   zMINIDUMP_MODULE_LIST.get_sizec                 C   s2   t | jƒjdddd�}| jD ]}|| ¡ 7 }q|S rB   )rh   rg   rH   )r   rJ   Úmoduler   r   r   rH   Í   s   
zMINIDUMP_MODULE_LIST.to_bytesc                 C   sD   t ƒ }tj|  d¡ddd�|_t|jƒD ]}|j t 	| ¡¡ q|S rB   )
re   rO   rN   rP   rf   Úrangerg   ÚappendrZ   r   )r   ÚmmlÚ_r   r   r   r   Ó   s
   zMINIDUMP_MODULE_LIST.parseN)r.   r/   r0   r   rA   rH   r1   r   r   r   r   r   re   Å   s    re   c                   @   s<   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ ZdS )ÚMinidumpModuleListc                 C   s
   g | _ d S r   )Úmodulesr   r   r   r   r   Ý   s   
zMinidumpModuleList.__init__c                 C   sV   t ƒ }| | jj¡ t | | jj¡¡}t 	|¡}|j
D ]}|j t 	||¡¡ q|S r   )rn   ÚseekÚLocationÚRvarK   rL   rP   ÚDataSizere   r   rg   ro   rk   r   )Údirr   rJ   ÚchunkÚmtlr   r   r   r   r   à   s   

zMinidumpModuleList.parsec                 Ã   sr   �t ƒ }| | jj¡I d H  | | jj¡I d H }t |¡}t 	|¡}|j
D ]}t ||¡I d H }|j |¡ q%|S r   )rn   rp   rq   rr   rP   rs   rK   rL   re   r   rg   r   r    ro   rk   )rt   r   rJ   Ú
chunk_dataru   rv   r   Úxr   r   r   r    ê   s   €


zMinidumpModuleList.aparsec                 C   s0   g }|  t ¡ ¡ | jD ]	}|  | ¡ ¡ q|S r   )rk   r   r(   ro   r+   )r   rJ   r   r   r   r   Úto_tableö   s
   
zMinidumpModuleList.to_tablec                 C   s   dt |  ¡ ƒ }|S )Nz== ModuleList ==
)Úconstruct_tablery   rI   r   r   r   r,   ý   s   zMinidumpModuleList.__str__N)	r.   r/   r0   r   r1   r   r    ry   r,   r   r   r   r   rn   Ü   s    
	
rn   )rK   Úminidump.common_structsr   r2   rZ   re   rn   r   r   r   r   Ú<module>   s   F@6