o
    j                     @   sJ   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dS )
    N)*)MINIDUMP_MEMORY_DESCRIPTORc                   @   s(   e Zd Zdd Zdd Zedd ZdS )MINIDUMP_THREAD_LISTc                 C   s   d | _ g | _d S N)NumberOfThreadsThreadsself r
   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/ThreadListStream.py__init__   s   
zMINIDUMP_THREAD_LIST.__init__c                 C   s2   t | jjdddd}| jD ]}|| 7 }q|S N   littleF	byteordersigned)lenr   to_bytes)r	   tthr
   r
   r   r      s   
zMINIDUMP_THREAD_LIST.to_bytesc                 C   sD   t  }tj| dddd|_t|jD ]}|jt	|  q|S r   )
r   int
from_bytesreadr   ranger   appendMINIDUMP_THREADparse)buffmtl_r
   r
   r   r      s
   zMINIDUMP_THREAD_LIST.parseN)__name__
__module____qualname__r   r   staticmethodr   r
   r
   r
   r   r      s
    r   c                   @   s<   e Zd Zdd Zdd Zedd Zedd Zd	d
 ZdS )r   c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r   )ThreadIdSuspendCountPriorityClassPriorityTebStackThreadContextr   r
   r
   r   r       s   
zMINIDUMP_THREAD.__init__c                 C   s   | j jjdddd}|| jjdddd7 }|| jjdddd7 }|| jjdddd7 }|| jjdddd7 }|| j 7 }|| j 7 }|S Nr   r   Fr      )	r%   valuer   r&   r'   r(   r)   r*   r+   )r	   r   r
   r
   r   r   )   s   zMINIDUMP_THREAD.to_bytesc                 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	
| |_t
| |_|S r,   )r   r   r   r   r%   r&   r'   r(   r)   r   r   r*   MINIDUMP_LOCATION_DESCRIPTORr+   )r   mtr
   r
   r   r   3   s   zMINIDUMP_THREAD.parsec                   C   s   g dS )N)r%   r&   r'   r(   r)   r
   r
   r
   r
   r   
get_header@   s   zMINIDUMP_THREAD.get_headerc                 C   s,   t | jt| jt| jt| jt | jgS r   )hexr%   strr&   r'   r(   r)   r   r
   r
   r   to_rowL   s   zMINIDUMP_THREAD.to_rowN)	r!   r"   r#   r   r   r$   r   r1   r4   r
   r
   r
   r   r      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 )MinidumpThreadListc                 C   s
   g | _ d S r   )threadsr   r
   r
   r   r   X   s   
zMinidumpThreadList.__init__c                 C   s>   t  }|| jj t|| jj}t	|}|j
|_|S r   )r5   seekLocationRvaioBytesIOr   DataSizer   r   r   r6   )dirr   r   chunkr   r
   r
   r   r   [   s   
zMinidumpThreadList.parsec                    sP   t  }|| jjI d H  || jjI d H }t|}t	|}|j
|_|S r   )r5   r7   r8   r9   r   r<   r:   r;   r   r   r   r6   )r=   r   r   
chunk_datar>   r   r
   r
   r   aparsed   s   

zMinidumpThreadList.aparsec                 C   s0   g }| t  | jD ]	}| |  q|S r   )r   r   r1   r6   r4   )r	   r   threadr
   r
   r   to_tablen   s
   
zMinidumpThreadList.to_tablec                 C   s   dt |   S )NzThreadList
)construct_tablerB   r   r
   r
   r   __str__u   s   zMinidumpThreadList.__str__N)	r!   r"   r#   r   r$   r   r@   rB   rD   r
   r
   r
   r   r5   W   s    

	r5   )r:   minidump.common_structs!minidump.streams.MemoryListStreamr   r   r   r5   r
   r
   r
   r   <module>   s   8