o
    �õ±j½#  ã                   @   s$  d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZm Z  d d	l!mZm"Z" d d
l#m$Z$ d dl%Z%G dd„ dƒZ&G dd„ de&ƒZ'G dd„ dƒZ(e)dkr�dZ*e'e*ƒZ+e(e+ƒZ,e, -¡  dS dS )é    )ÚMINIDUMP_STREAM_TYPEÚMINIDUMP_TYPE)ÚMinidumpHeader)ÚMINIDUMP_LOCATION_DESCRIPTOR)ÚGetSystemInfoÚGetVersionExW)ÚOpenProcessÚPROCESS_ALL_ACCESSÚVirtualQueryExÚReadProcessMemory)ÚEnumProcessModulesÚGetModuleInformationÚGetModuleFileNameExW)ÚGetFileVersionInfoW)ÚMINIDUMP_SYSTEM_INFOÚPROCESSOR_ARCHITECTUREÚMINIDUMP_MODULE_LISTÚMINIDUMP_MODULEÚVS_FIXEDFILEINFOÚMINIDUMP_MEMORY_INFO_LISTÚMINIDUMP_MEMORY_INFOÚAllocationProtectÚ
MemoryTypeÚMemoryStateÚMINIDUMP_MEMORY64_LISTÚMINIDUMP_MEMORY_DESCRIPTOR64)r   ÚPRODUCT_TYPE)ÚMINIDUMP_DIRECTORYNc                   @   óL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚMinidumpSystemReaderc                 C   ó   d S ©N© ©Úselfr"   r"   ú‚/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/writer.pyÚ__init__   ó   zMinidumpSystemReader.__init__c                 C   r    r!   r"   r#   r"   r"   r%   Úsetup   r'   zMinidumpSystemReader.setupc                 C   r    r!   r"   r#   r"   r"   r%   Úget_sysinfo   r'   z MinidumpSystemReader.get_sysinfoc                 C   r    r!   r"   r#   r"   r"   r%   Úget_modules   r'   z MinidumpSystemReader.get_modulesc                 C   r    r!   r"   r#   r"   r"   r%   Úget_sections!   r'   z!MinidumpSystemReader.get_sectionsc                 C   r    r!   r"   r#   r"   r"   r%   Ú
get_memory$   r'   zMinidumpSystemReader.get_memoryc                 C   r    r!   r"   r#   r"   r"   r%   Úget_threads'   r'   z MinidumpSystemReader.get_threadsc                 C   r    r!   r"   r#   r"   r"   r%   Úget_exceptions*   r'   z#MinidumpSystemReader.get_exceptionsN)Ú__name__Ú
__module__Ú__qualname__r&   r(   r)   r*   r+   r,   r-   r.   r"   r"   r"   r%   r      s    r   c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚLiveSystemReaderc                 C   s.   t  | ¡ || _d | _d | _d | _|  ¡  d S r!   )r   r&   ÚpidÚprocess_handleÚsysinfoÚmeminfolistr(   )r$   r3   r"   r"   r%   r&   .   s   
zLiveSystemReader.__init__c                 C   s   t td| jƒ| _d S )NF)r   r	   r3   r4   r#   r"   r"   r%   Úopen_process6   s   zLiveSystemReader.open_processc                 C   ó   |   ¡  d S r!   )r7   r#   r"   r"   r%   r(   9   ó   zLiveSystemReader.setupc                 C   sº   t ƒ }tƒ }tƒ }t|jjjƒ|_|j|_	|j
|_|j|_t|jƒ|_|j|_|j|_|j|_|j|_d|_|j|_|j|_|jtjkrSg d¢|_d|_ d|_!d|_"nddg|_#|| _$|S )Nr   )r   r   r   )%r   r   r   r   ÚidÚwÚwProcessorArchitectureÚProcessorArchitectureÚwProcessorLevelÚProcessorLevelÚwProcessorRevisionÚProcessorRevisionÚdwNumberOfProcessorsÚNumberOfProcessorsr   ÚwProductTypeÚProductTypeÚdwMajorVersionÚMajorVersionÚdwMinorVersionÚMinorVersionÚdwBuildNumberÚBuildNumberÚdwPlatformIdÚ
PlatformIdÚCSDVersionRvaÚ
wSuiteMaskÚ	SuiteMaskÚszCSDVersionÚ
CSDVersionÚINTELÚVendorIdÚVersionInformationÚFeatureInformationÚAMDExtendedCpuFeaturesÚProcessorFeaturesÚsysinfo_raw)r$   rY   Úversion_rawr5   r"   r"   r%   r)   <   s.   

zLiveSystemReader.get_sysinfoc                 C   s¦   t ƒ }t| jƒD ]H}t|ƒ t| j|ƒ}t| j|ƒ}t|ƒ}t |¡}t|ƒ t	ƒ }|j
|_|j|_|jd|j > |_d |_||_d|_d|_||_|j |¡ q|S )Né    r   )r   r   r4   Úprintr   r   r   r   Ú
from_bytesr   ÚlpBaseOfDllÚBaseOfImageÚSizeOfImageÚdwFileDateMSÚdwFileDateLSÚTimeDateStampÚModuleNameRvaÚVersionInfoÚCvRecordÚ
MiscRecordÚ
ModuleNameÚModulesÚappend)r$   Úmodule_listÚmoduleÚmodinfoÚmodnameÚfileversion_rawÚfileversionÚmmodr"   r"   r%   r*   a   s&   
zLiveSystemReader.get_modulesc                 C   sü   | j d u r	|  ¡  tƒ }| j j}|| j jk ryt| j|ƒ}tƒ }|j|_|j	|_	|j
|_
|j|_zt|jƒ|_W n   |j|_Y zt
|jƒ|_W n   |j|_Y zt|jƒ|_W n   |j|_Y |j |¡ tt|ƒƒ ||j7 }|| j jk s|| _|S r!   )rY   r)   r   ÚlpMinimumApplicationAddressÚlpMaximumApplicationAddressr
   r4   r   ÚBaseAddressÚAllocationBaser   Ú
RegionSizer   ÚStateÚProtectr   ÚTypeÚentriesrj   r\   Ústrr6   )r$   r6   ÚiÚmi_rawÚmir"   r"   r%   r+   |   s:   




ézLiveSystemReader.get_sectionsc                 C   r    r!   r"   r#   r"   r"   r%   r-   �   r'   zLiveSystemReader.get_threadsc                 C   r    r!   r"   r#   r"   r"   r%   r.       r'   zLiveSystemReader.get_exceptionsc                 C   s„   t jt jt jt jt jt jg}tƒ }| jj	D ]*}|j
|v r?tƒ }|j|_|j|_t|j
ƒ t| j|j|jƒ}t|ƒ |j |¡ q|S r!   )r   ÚPAGE_EXECUTE_READÚPAGE_EXECUTE_READWRITEÚPAGE_READONLYÚPAGE_EXECUTEÚPAGE_READWRITEÚPAGE_WRITECOPYr   r6   rz   rx   r   rt   ÚStartOfMemoryRangerv   ÚDataSizer\   r   r4   ÚinputÚMemoryRangesrj   )r$   Ú
read_flagsÚmemlistÚsectionÚmemdescÚdatar"   r"   r%   r,   £   s&   û

€zLiveSystemReader.get_memoryN)r/   r0   r1   r&   r7   r(   r)   r*   r+   r-   r.   r,   r"   r"   r"   r%   r2   -   s    %!r2   c                   @   r   )ÚMinidumpWriterc                 C   sB   || _ d | _i | _d | _g | _d| _d | _t ¡ | _	t ¡ | _
d S )Né   )Ú	sysreaderÚoutput_fileÚstreamsÚheaderÚdirectory_listÚdirectory_rvaÚheader_sizeÚioÚBytesIOÚheader_bufferÚdata_buffer)r$   r�   r"   r"   r%   r&   º   s   
zMinidumpWriter.__init__c                 C   sT   t ƒ | _d| j_d| j_t| jƒd | j_| j| j_t	j
| j_| j | j ¡ ¡ d S ©Né   )r   r“   ÚVersionÚImplementationVersionÚlenr’   ÚNumberOfStreamsr•   ÚStreamDirectoryRvar   ÚMiniDumpWithFullMemoryÚFlagsr™   ÚwriteÚto_bytesr#   r"   r"   r%   Úprepare_headerÈ   s   

zMinidumpWriter.prepare_headerc                 C   sJ   | j }| jD ]}| j|  | j¡ tƒ }||_||_| j | ¡ ¡ qd S r!   )	r–   r’   r¥   rš   r   Ú
StreamTypeÚLocationr™   r¤   )r$   Úcurr_posÚ
streamtypeÚ	directoryr"   r"   r%   Úprepare_directoryÔ   s   
ûz MinidumpWriter.prepare_directoryc                 C   sP   d}|t | jƒd 7 }| jD ]}|| j|  ¡ 7 }q|d7 }|  ¡  |  ¡  d S )Nr�   é   i (  )rŸ   r’   Úget_sizer¦   r¬   )r$   r–   Ústreamr"   r"   r%   Úfinalize_headerÝ   s   
zMinidumpWriter.finalize_headerc                 C   sd   | j  ¡ }|| jtj< tt|ƒƒ | j  ¡ }|| jtj< | j  	¡ }|| jtj
< |  ¡  | j  ¡ }d S r!   )r�   r)   r’   r   ÚSystemInfoStreamr\   r{   r*   ÚModuleListStreamr+   ÚMemoryInfoListStreamr°   r,   )r$   r5   Ú
moduleinfoÚsectionsÚmemoryr"   r"   r%   Úcreate_streamsñ   s   


zMinidumpWriter.create_streamsc                 C   s:   | j  ¡ }| j  dd¡ | j  |  ¡ ¡ | j  |d¡ d S )Nr   )Úhdr_buffÚtellÚseekr¤   Úconstruct_header)r$   Úhdr_posr"   r"   r%   Úwrite_header  s
   
zMinidumpWriter.write_headerc                 C   s,   | j  | j| j¡ |  jd7  _|  ¡  d S r›   )r�   r)   r¸   Ú	data_buffÚ
stream_cntr½   r#   r"   r"   r%   Úconstruct_directory$  s   z"MinidumpWriter.construct_directoryc                 C   r8   r!   )r·   r#   r"   r"   r%   Úrun3  r9   zMinidumpWriter.runN)r/   r0   r1   r&   r¦   r¬   r°   r·   r½   rÀ   rÁ   r"   r"   r"   r%   rŽ   ¹   s    	+rŽ   Ú__main__i€%  ).Úminidump.constantsr   r   Úminidump.headerr   Úminidump.common_structsr   Úminidump.utils.winapi.versionr   r   Úminidump.utils.winapi.kernel32r   r	   r
   r   Úminidump.utils.winapi.psapir   r   r   r   Úminidump.streamsr   r   r   r   r   r   r   r   r   r   r   r   Ú!minidump.streams.SystemInfoStreamr   Úminidump.directoryr   r—   r   r2   rŽ   r/   r3   r�   ÚwriterrÁ   r"   r"   r"   r%   Ú<module>   s*    8 ~ü