o
    �õ±jÙ%  ã                   @   sˆ   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lmZ d dl	T d dl
T d dlmZ d dlmZ G dd„ dƒZG d	d
„ d
ƒZdS )é    N)ÚMinidumpHeader©ÚAMinidumpFileReader)Ú*)ÚMINIDUMP_STREAM_TYPE)ÚMINIDUMP_DIRECTORYc                   @   s0   e Zd Zdd„ Zddd„Zddd„Zd	d
„ ZdS )Ú	AsyncFilec                 C   s   || _ t|dƒ| _d S )NÚrb)ÚfilenameÚopenÚfhandle)Úselfr
   © r   ú‰/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/aminidumpfile.pyÚ__init__   s   zAsyncFile.__init__éÿÿÿÿc                 Ã   s   �| j  |¡S ©N)r   Úread)r   Únr   r   r   r      s   €zAsyncFile.readr   c                 Ã   s   �| j  ||¡S r   )r   Úseek)r   r   Úbegr   r   r   r      s   €zAsyncFile.seekc                 C   s
   | j  ¡ S r   )r   Útell©r   r   r   r   r       s   
zAsyncFile.tellN)r   )r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s
    

r   c                   @   sn   e Zd Zdd„ Zedd„ ƒZeddd„ƒZedd	„ ƒZed
d„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚAMinidumpFilec                 C   sp   d | _ d | _d | _g | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d S r   )r
   Úfile_handleÚheaderÚdirectoriesÚ
threads_exÚthreadsÚmodulesÚmemory_segmentsÚmemory_segments_64ÚsysinfoÚ	comment_aÚ	comment_wÚ	exceptionÚhandlesÚunloaded_modulesÚ	misc_infoÚmemory_infoÚthread_infor   r   r   r   r   $   s$   
zAMinidumpFile.__init__c                 Ã   s*   �t ƒ }| |_t| ƒ|_| ¡ I d H  |S r   )r   r
   r   r   Ú_parse)r
   Úmfr   r   r   Úparse9   s   €
zAMinidumpFile.parseÚ c                 Ã   s&   �t ƒ }||_| |_| ¡ I dH  |S )z–
		External file handle must be an object that exposes basic file IO functionality
		that you'd get by python's file buffer (read, seek, tell etc.)
		N)r   r
   r   r.   )r   r
   r/   r   r   r   Úparse_externalA   s   €zAMinidumpFile.parse_externalc                 Ã   s   �t  t | ¡¡I d H S r   )r   Ú
parse_buffÚioÚBytesIO)Údatar   r   r   Úparse_bytesM   s   €zAMinidumpFile.parse_bytesc                 C   s   t ƒ }| |_| ¡  |S r   )r   r   r.   )Úbufferr/   r   r   r   r3   Q   s   zAMinidumpFile.parse_buffc                 C   s   t | ƒS r   r   r   r   r   r   Ú
get_readerX   s   zAMinidumpFile.get_readerc                 Ã   s"   �|   ¡ I d H  |  ¡ I d H  d S r   )Ú_AMinidumpFile__parse_headerÚ!_AMinidumpFile__parse_directoriesr   r   r   r   r.   [   s   €zAMinidumpFile._parsec                 Ã   sÂ   �t  | j¡I d H | _td| jjƒD ]L}| j | jj|d  d¡I d H  t | j¡I d H }|r6| j	 
|¡ q| j | jj|d  d¡I d H  | j d¡I d H }tj|ddd�}t d| ¡ qd S )Nr   é   é   ÚlittleF)Ú	byteorderÚsignedz+Found Unknown UserStream directory Type: %x)r   Úaparser   r   ÚrangeÚNumberOfStreamsr   ÚStreamDirectoryRvar   r   Úappendr   ÚintÚ
from_bytesÚloggingÚdebug)r   ÚiÚminidump_dirÚtÚuser_stream_type_valuer   r   r   Ú__parse_header_   s   €  özAMinidumpFile.__parse_headerc                 Ã   s4  �| j D �]’}|jtjkrt d|jj|jjf ¡ q|jtj	kr/t d|jj|jjf ¡ q|jtj
krCt d|jj|jjf ¡ q|jtjkrbt d|jj|jjf ¡ t || j¡I d H | _q|jtjkr�t d|jj|jjf ¡ t || j¡I d H | _q|jtjkr t d|jj|jjf ¡ t || j¡I d H | _q|jtjkr¿t d|jj|jjf ¡ t || j¡I d H | _q|jtjkrÞt d|jj|jjf ¡ t || j¡I d H | _q|jtjkrýt d	|jj|jjf ¡ t || j¡I d H | _q|jtjk�rt d
|jj|jjf ¡ t || j¡I d H | _ q|jtj!k�r=t d|jj|jjf ¡ t! || j¡I d H | _"q|jtj#k�r]t d|jj|jjf ¡ t$ || j¡I d H | _%q|jtj&k�r}t d|jj|jjf ¡ t' || j¡I d H | _(q|jtj)k�r—t d|jj|jjf ¡ t d¡ q|jtj*k�r·t d|jj|jjf ¡ t+ || j¡I d H | _,q|jtj-k�r×t d|jj|jjf ¡ t. || j¡I d H | _/q|jtj0k�r÷t d|jj|jjf ¡ t1 || j¡I d H | _2q|jtj3k�rt d|jj|jjf ¡ t4 || j¡I d H | _5t t6| j5ƒ¡ q|jtj7k�r9t d|jj|jjf ¡ t d¡ q|jtj8k�rSt d|jj|jjf ¡ t d¡ nD|jtj9k�rmt d|jj|jjf ¡ t d¡ n*|jtj:k�r‡t d|jj|jjf ¡ t d¡ nt d|jj;|jj|jjf ¡ qd S )NzFound UnusedStream @%x Size: %dz"Found ReservedStream0 @%x Size: %dz"Found ReservedStream1 @%x Size: %dz#Found ThreadListStream @%x Size: %dz#Found ModuleListStream @%x Size: %dz#Found MemoryListStream @%x Size: %dz#Found SystemInfoStream @%x Size: %dz%Found ThreadExListStream @%x Size: %dz%Found Memory64ListStream @%x Size: %dz!Found CommentStreamA @%x Size: %dz!Found CommentStreamW @%x Size: %dz"Found ExceptionStream @%x Size: %dz#Found HandleDataStream @%x Size: %dz&Found FunctionTableStream @%x Size: %dz3Parsing of this stream type is not yet implemented!z+Found UnloadedModuleListStream @%x Size: %dz!Found MiscInfoStream @%x Size: %dz'Found MemoryInfoListStream @%x Size: %dz'Found ThreadInfoListStream @%x Size: %dz)Found SystemMemoryInfoStream @%x Size: %dzISystemMemoryInfoStream parsing is not implemented (Missing documentation)z'Found JavaScriptDataStream @%x Size: %dzGJavaScriptDataStream parsing is not implemented (Missing documentation)z*Found ProcessVmCountersStream @%x Size: %dzJProcessVmCountersStream parsing is not implemented (Missing documentation)zFound TokenStream @%x Size: %dz>TokenStream parsing is not implemented (Missing documentation)z+Found Unknown Stream! Type: %s @%x Size: %d)<r   Ú
StreamTyper   ÚUnusedStreamrH   rI   ÚLocationÚRvaÚDataSizeÚReservedStream0ÚReservedStream1ÚThreadListStreamÚMinidumpThreadListrA   r   r!   ÚModuleListStreamÚMinidumpModuleListr"   ÚMemoryListStreamÚMinidumpMemoryListr#   ÚSystemInfoStreamÚMinidumpSystemInfor%   ÚThreadExListStreamÚMinidumpThreadExListr    ÚMemory64ListStreamÚMinidumpMemory64Listr$   ÚCommentStreamAr&   ÚCommentStreamWr'   ÚExceptionStreamÚExceptionListr(   ÚHandleDataStreamÚMinidumpHandleDataStreamr)   ÚFunctionTableStreamÚUnloadedModuleListStreamÚMinidumpUnloadedModuleListr*   ÚMiscInfoStreamÚMinidumpMiscInfor+   ÚMemoryInfoListStreamÚMinidumpMemoryInfoListr,   ÚThreadInfoListStreamÚMinidumpThreadInfoListr-   ÚstrÚSystemMemoryInfoStreamÚJavaScriptDataStreamÚProcessVmCountersStreamÚTokenStreamÚname)r   Údirr   r   r   Ú__parse_directoriesm   s°   €

 —z!AMinidumpFile.__parse_directoriesc                 C   s¨   d}|t | jƒ7 }|t | jƒ7 }| jD ]
}|t |ƒd 7 }q| jD ]
}|t |ƒd 7 }q!| jd ur?| jD ]
}|t |ƒd 7 }q4| jd urR| jD ]
}|t |ƒd 7 }qG|S )Nz== Minidump File ==
Ú
)rq   r   r%   r   r"   r#   r$   )r   rL   rw   ÚmodÚsegmentr   r   r   Ú__str__Þ   s   





zAMinidumpFile.__str__N)r1   )r   r   r   r   Ústaticmethodr0   r2   r7   r3   r9   r.   r:   r;   r|   r   r   r   r   r   #   s    


qr   )r4   ÚsysÚenumÚstructrH   Úminidump.headerr   Úminidump.aminidumpreaderr   Úminidump.streamsÚminidump.common_structsÚminidump.constantsr   Úminidump.directoryr   r   r   r   r   r   r   Ú<module>   s   