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