o
    j#                     @   s   d dl Z d dlZd dlT d dlmZ G dd dZG dd dZG dd	 d	ZG d
d dejZ	G dd dZ
G dd dZG dd dZG dd dZdS )    N)*)Listc                   @       e Zd Zdd Zedd ZdS )MINIDUMP_HANDLE_DATA_STREAMc                 C      d | _ d | _d | _d | _d S N)SizeOfHeaderSizeOfDescriptorNumberOfDescriptorsReservedself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/HandleDataStream.py__init__      
z$MINIDUMP_HANDLE_DATA_STREAM.__init__c                 C   sj   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|_|S N   littleF	byteordersigned)r   int
from_bytesreadr   r	   r
   r   )buffmhdsr   r   r   parse   s   z!MINIDUMP_HANDLE_DATA_STREAM.parseN__name__
__module____qualname__r   staticmethodr   r   r   r   r   r      s    r   c                   @   s$   e Zd ZdZdd Zedd ZdS )MINIDUMP_HANDLE_DESCRIPTOR    c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r   )HandleTypeNameRvaObjectNameRva
AttributesGrantedAccessHandleCountPointerCountr   r   r   r   r       s   
z#MINIDUMP_HANDLE_DESCRIPTOR.__init__c                 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j| dddd|_	tj| dddd|_
|S N   r   Fr   r   )r#   r   r   r   r%   r&   r'   r(   r)   r*   r+   r   mhdr   r   r   r   )   s   z MINIDUMP_HANDLE_DESCRIPTOR.parseN)r   r    r!   sizer   r"   r   r   r   r   r   r#      s
    	r#   c                   @   r   )MINIDUMP_HANDLE_DESCRIPTOR_2c                 C   s:   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d S r   )	r%   r&   r'   r(   r)   r*   r+   ObjectInfoRva	Reserved0r   r   r   r   r   8   s   
z%MINIDUMP_HANDLE_DESCRIPTOR_2.__init__c                 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j| dddd|_	tj| dddd|_
tj| dddd|_tj| dddd|_|S r,   )r1   r   r   r   r%   r&   r'   r(   r)   r*   r+   r2   r3   r.   r   r   r   r   C   s   z"MINIDUMP_HANDLE_DESCRIPTOR_2.parseNr   r   r   r   r   r1   7   s    r1   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )'MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPEr            r      N)	r   r    r!   MiniHandleObjectInformationNoneMiniThreadInformation1MiniMutantInformation1MiniMutantInformation2MiniProcessInformation1MiniProcessInformation2r   r   r   r   r4   R   s    r4   c                   @   s,   e Zd Zdd Zedd Zedd ZdS )"MINIDUMP_HANDLE_OBJECT_INFORMATIONc                 C   r   r   )NextInfoRvaInfoType
SizeOfInfo
info_bytesr   r   r   r   r   \   s   
z+MINIDUMP_HANDLE_OBJECT_INFORMATION.__init__c                 C   s`   t  }tj| dddd|_tj| dddd|_tj| dddd|_| |j|_|S r   )r?   r   r   r   r@   rA   rB   rC   )r   mhoir   r   r   r   d   s   z(MINIDUMP_HANDLE_OBJECT_INFORMATION.parsec                    s   t  }| dI d H }tj|ddd|_| dI d H }tj|ddd|_| dI d H }tj|ddd|_| |jI d H |_|S r   )r?   r   r   r   r@   rA   rB   rC   )r   rD   tr   r   r   aparsem   s   z)MINIDUMP_HANDLE_OBJECT_INFORMATION.aparseN)r   r    r!   r   r"   r   rF   r   r   r   r   r?   [   s    
r?   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )MinidumpHandleObjectInformationc                 C   r   r   )NextInforA   rB   rC   r   r   r   r   r   z   r   z(MinidumpHandleObjectInformation.__init__c                 C   s"   t  }| j|_| j|_| j|_|S r   )rG   rA   rB   rC   )rD   rE   r   r   r   r      s
   z%MinidumpHandleObjectInformation.parsec                 C   s
   | j  S r   )rC   hexr   r   r   r   __str__   s   
z'MinidumpHandleObjectInformation.__str__N)r   r    r!   r   r"   r   rJ   r   r   r   r   rG   y   s
    
rG   c                   @   sL   e Zd Zdd Zedd Zedd Zedd Zed	d
 Zdd Z	dS )MinidumpHandleDescriptorc                 C   s4   d | _ d | _d | _d | _d | _d | _d | _g | _d S r   )r%   TypeName
ObjectNamer(   r)   r*   r+   ObjectInfosr   r   r   r   r      s   
z!MinidumpHandleDescriptor.__init__c                 C   s   t  }| j|_| jdkrt| j||_| jdkr!t| j||_| j|_| j	|_	| j
|_
| j|_t| trH| jd urH| jdkrHt || j| |S Nr   )rK   r%   r&   MINIDUMP_STRINGget_from_rvarL   r'   rM   r(   r)   r*   r+   
isinstancer1   r2   walk_objectinforE   r   r/   r   r   r   r      s   


zMinidumpHandleDescriptor.parsec                    s   t  }| j|_| jdkrt| j|I d H |_| jdkr(t| j|I d H |_| j|_| j	|_	| j
|_
| j|_t| trR| jd urR| jdkrRt || j|I d H  |S rO   )rK   r%   r&   rP   aget_from_rvarL   r'   rM   r(   r)   r*   r+   rR   r1   r2   awalk_objectinforT   r   r   r   rF      s   


zMinidumpHandleDescriptor.aparsec                 C   s`   |d ur*|dkr.| | t|}t|}| j| |j}|d ur,|dksd S d S d S d S rO   )seekr?   r   rG   rN   appendrH   r/   startr   rD   rE   r   r   r   rS      s   


 z(MinidumpHandleDescriptor.walk_objectinfoc                    sn   |d ur1|dkr5| |I d H  t|I d H }t|}| j| |j}|d ur3|dks	d S d S d S d S rO   )rW   r?   rF   rG   r   rN   rX   rH   rY   r   r   r   rV      s   
 z)MinidumpHandleDescriptor.awalk_objectinfoc                 C   s   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }| jD ]}|t|7 }q6|S )	Nz == MinidumpHandleDescriptor == 
zHandle 0x%08x zTypeName %s zObjectName %s zAttributes %s zGrantedAccess %s zHandleCount %s zPointerCount %s )	r%   rL   rM   r(   r)   r*   r+   rN   str)r   rE   oir   r   r   rJ      s   
z MinidumpHandleDescriptor.__str__N)
r   r    r!   r   r"   r   rF   rS   rV   rJ   r   r   r   r   rK      s    




	rK   c                   @   s4   e Zd Zdd Zedd Zedd Zdd Zd	S )
MinidumpHandleDataStreamc                 C   s   d | _ g | _d S r   )headerhandlesr   r   r   r   r      s   
z!MinidumpHandleDataStream.__init__c                 C   s   t  }|| jj t|| jj}t	||_
t|j
jD ](}|j
jtjkr9t	|}|jt	|| q t	|}|jt	|| q |S r   )r]   rW   LocationRvaioBytesIOr   DataSizer   r   r^   ranger
   r	   r#   r0   r_   rX   rK   r1   )dirr   rE   chunk_r/   r   r   r   r      s   

zMinidumpHandleDataStream.parsec                    s   t  }|| jjI d H  || jjI d H }t|}t	||_
t|j
jD ]2}|j
jtjkrGt	|}t||I d H }|j| q)t	|}t||I d H }|j| q)|S r   )r]   rW   r`   ra   r   rd   rb   rc   r   r   r^   re   r
   r	   r#   r0   rK   rF   r_   rX   r1   )rf   r   rE   
chunk_datarg   rh   r/   rr   r   r   rF      s   


zMinidumpHandleDataStream.aparsec                 C   s    d}| j D ]}|t|7 }q|S )Nz== MinidumpHandleDataStream ==
)r_   r[   )r   rE   handler   r   r   rJ      s   
z MinidumpHandleDataStream.__str__N)r   r    r!   r   r"   r   rF   rJ   r   r   r   r   r]      s    

r]   )rb   enumminidump.common_structstypingr   r   r#   r1   Enumr4   r?   rG   rK   r]   r   r   r   r   <module>   s   	M