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rd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 ~