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rtd|jj|jjf  t|| jI d H | _q|jtjkrtd|jj|jjf  t|| jI d H | _q|jtjkrtd|jj|jjf  t|| jI d H | _q|jtjkrtd|jj|jjf  t|| jI d H | _q|jtjkrt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rtd|jj|jjf  td q|jtj*krtd|jj|jjf  t+|| jI d H | _,q|jtj-krtd|jj|jjf  t.|| jI d H | _/q|jtj0krt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rt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   