o
    �õ±j‚-  ã                   @   sd   d dl Z d dlZd dlmZ d dlT G dd„ dƒZG dd„ dejƒZG dd	„ d	ƒZG d
d„ dƒZ	dS )é    N)ÚList)Ú*c                   @   s<   e Zd Zdd„ Zedd„ ƒZdd„ Zedd„ ƒZd	d
„ ZdS )ÚMINIDUMP_EXCEPTION_STREAMc                 C   s   d | _ d | _d | _d | _d S ©N)ÚThreadIdÚ	alignmentÚExceptionRecordÚThreadContext©Úself© r   ú“/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/ExceptionStream.pyÚ__init__   s   
z"MINIDUMP_EXCEPTION_STREAM.__init__c                 C   sR   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_t | ¡|_t	 | ¡|_
|S )Né   ÚlittleF©Ú	byteorderÚsigned)r   ÚintÚ
from_bytesÚreadr   r   ÚMINIDUMP_EXCEPTIONÚparser   ÚMINIDUMP_LOCATION_DESCRIPTORr	   )ÚbuffÚmesr   r   r   r      s   zMINIDUMP_EXCEPTION_STREAM.parsec                 C   s:   d}|d| j  7 }|dt| jƒ 7 }|dt| jƒ 7 }|S )Nz == MINIDUMP_EXCEPTION_STREAM ==
zThreadId: %s
zExceptionRecord:
 %s
zThreadContext: %s
)r   Ústrr   r	   ©r   Útr   r   r   Ú__str__   s
   z!MINIDUMP_EXCEPTION_STREAM.__str__c                   C   s   dgt  ¡ ¢S )Nr   )r   Ú
get_headerr   r   r   r   r    &   s   ÿþz$MINIDUMP_EXCEPTION_STREAM.get_headerc                 C   s   d| j  g| j ¡ ¢S ©Nz0x%08x)r   r   Úto_rowr
   r   r   r   r"   .   s   ÿþz MINIDUMP_EXCEPTION_STREAM.to_rowN)	Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r   r    r"   r   r   r   r   r      s    

r   c                   @   sÜ   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5S )6ÚExceptionCodeÚEXCEPTION_UNKNOWN_CHECK_RAWr   é   é   é   r   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   l       l   Œ    l       l       l   �    l   Ž    l   �    l   �    l   ‘    l   ’    l   “    l       l       l   ”    l   •    l   &    l   %    l   –    l       l   ý    N)7r#   r$   r%   ÚEXCEPTION_UNKNOWNÚEXCEPTION_NONEÚEXCEPTION_SIGHUPÚEXCEPTION_SIGINTÚEXCEPTION_SIGQUITÚEXCEPTION_SIGILLÚEXCEPTION_SIGTRAPÚEXCEPTION_SIGIOTÚEXCEPTION_SIGBUSÚEXCEPTION_SIGFPEÚEXCEPTION_SIGKILLÚEXCEPTION_SIGUSR1ÚEXCEPTION_SIGSEGVÚEXCEPTION_SIGUSR2ÚEXCEPTION_SIGPIPEÚEXCEPTION_SIGALRMÚEXCEPTION_SIGTERMÚEXCEPTION_SIGSTKFLTÚEXCEPTION_SIGCHLDÚEXCEPTION_SIGCONTVÚEXCEPTION_SIGSTOPÚEXCEPTION_SIGTSTPÚEXCEPTION_SIGTTINÚEXCEPTION_SIGTTOUÚEXCEPTION_SIGURGÚEXCEPTION_SIGXCPUÚEXCEPTION_SIGXFSZÚEXCEPTION_SIGVTALRMÚEXCEPTION_SIGPROFÚEXCEPTION_SIGWINCHÚEXCEPTION_SIGIOÚEXCEPTION_SIGPWRÚEXCEPTION_ACCESS_VIOLATIONÚEXCEPTION_ARRAY_BOUNDS_EXCEEDEDÚEXCEPTION_BREAKPOINTÚEXCEPTION_DATATYPE_MISALIGNMENTÚEXCEPTION_FLT_DENORMAL_OPERANDÚEXCEPTION_FLT_DIVIDE_BY_ZEROÚEXCEPTION_FLT_INEXACT_RESULTÚEXCEPTION_FLT_INVALID_OPERATIONÚEXCEPTION_FLT_OVERFLOWÚEXCEPTION_FLT_STACK_CHECKÚEXCEPTION_FLT_UNDERFLOWÚEXCEPTION_ILLEGAL_INSTRUCTIONÚEXCEPTION_IN_PAGE_ERRORÚEXCEPTION_INT_DIVIDE_BY_ZEROÚEXCEPTION_INT_OVERFLOWÚEXCEPTION_INVALID_DISPOSITIONÚ"EXCEPTION_NONCONTINUABLE_EXCEPTIONÚEXCEPTION_PRIV_INSTRUCTIONÚEXCEPTION_SINGLE_STEPÚEXCEPTION_STACK_OVERFLOWr   r   r   r   r'   5   sj    r'   c                   @   s@   e Zd ZdZdd„ Zedd„ ƒZdd„ Zedd	„ ƒZd
d„ Z	dS )r   r6   c                 C   s4   d | _ d | _d | _d | _d | _d | _g | _d | _d S r   )r'   ÚExceptionFlagsr   ÚExceptionAddressÚNumberParametersÚ$_MINIDUMP_EXCEPTION__unusedAlignmentÚExceptionInformationÚExceptionCode_rawr
   r   r   r   r   t   s   
zMINIDUMP_EXCEPTION.__init__c                 C   sü   t ƒ }tj|  d¡ddd�|_zt|jƒ|_W n   tj|_Y 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t jƒD ]}|j tj|  d¡ddd�¡ qa|jd |j
… |_|S )Nr   r   Fr   r/   )r   r   r   r   r   r'   rF   rz   r   r{   r|   r}   ÚrangeÚEXCEPTION_MAXIMUM_PARAMETERSr~   Úappend)r   ÚmeÚ_r   r   r   r   ~   s   
 zMINIDUMP_EXCEPTION.parsec                 C   sl   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|dd d	d
„ | jD ƒ¡ 7 }|S )Nz-== MINIDUExceptionInformationMP_EXCEPTION ==
zExceptionCode : %s
zExceptionFlags : %s
zExceptionRecord : %s
zExceptionAddress : 0x%x
zNumberParameters : %s
zExceptionInformation : %s
ú;c                 s   s   � | ]}d | V  qdS )z0x%xNr   )Ú.0Úinfor   r   r   Ú	<genexpr>š   s   € z-MINIDUMP_EXCEPTION.__str__.<locals>.<genexpr>)r'   rz   r   r{   r|   Újoinr~   r   r   r   r   r   ’   s   zMINIDUMP_EXCEPTION.__str__c                   C   s   g d¢S )N)r'   rz   r   r{   r~   r   r   r   r   r   r    �   s   zMINIDUMP_EXCEPTION.get_headerc                 C   s,   t | jƒd| j d| j d| j t | jƒgS r!   )r   r'   rz   r   r{   r~   r
   r   r   r   r"   ¨   s   ûzMINIDUMP_EXCEPTION.to_rowN)
r#   r$   r%   r�   r   r&   r   r   r    r"   r   r   r   r   r   q   s    



r   c                   @   s<   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ ZdS )ÚExceptionListc                 C   s
   g | _ d S r   )Úexception_recordsr
   r   r   r   r   ³   s   
zExceptionList.__init__c                 C   sv   t ƒ }| | jj¡ t | | jj¡¡}| ¡ | jjk r9t	 
|¡}|jjtjkr+	 |S |j |¡ | ¡ | jjk s|S r   )rŠ   ÚseekÚLocationÚRvaÚioÚBytesIOr   ÚDataSizeÚtellr   r   r   r'   rG   r‹   r‚   )Údirr   r   Úchunkr   r   r   r   r   ¶   s   
þ÷zExceptionList.parsec                 Ã   sˆ   �t ƒ }| | jj¡I d H  | | jj¡I d H }t |¡}| ¡ | jjk rBt	 
|¡}|jjtjkr4	 |S |j |¡ | ¡ | jjk s%|S r   )rŠ   rŒ   r�   rŽ   r   r‘   r�   r�   r’   r   r   r   r'   rG   r‹   r‚   )r“   r   r   Ú
chunk_datar”   r   r   r   r   ÚaparseÏ   s   €

þ÷zExceptionList.aparsec                 C   s0   g }|  t ¡ ¡ | jD ]	}|  | ¡ ¡ q|S r   )r‚   r   r    r‹   r"   )r   r   Ú	ex_recordr   r   r   Úto_tableé   s
   
zExceptionList.to_tablec                 C   s   dt |  ¡ ƒ S )Nz== ExceptionList ==
)Úconstruct_tabler˜   r
   r   r   r   r   ð   s   zExceptionList.__str__N)	r#   r$   r%   r   r&   r   r–   r˜   r   r   r   r   r   rŠ   ²   s    

rŠ   )
r�   ÚenumÚtypingr   Úminidump.common_structsr   ÚEnumr'   r   rŠ   r   r   r   r   Ú<module>   s   '<A