o
    j                     @   sL   d dl Z d dlT G dd dZG dd dZG dd dZG d	d
 d
ZdS )    N)*c                   @   (   e Zd Zdd Zdd Zedd ZdS )MINIDUMP_UNLOADED_MODULE_LISTc                 C   s   d | _ d | _d | _d S N)SizeOfHeaderSizeOfEntryNumberOfEntriesself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/UnloadedModuleListStream.py__init__   s   
z&MINIDUMP_UNLOADED_MODULE_LIST.__init__c                 C   sD   | j jjdddd}|| jjdddd7 }|| jjdddd7 }|S N   littleF	byteordersigned)r   valueto_bytesr   r   r
   tr   r   r   r      s   z&MINIDUMP_UNLOADED_MODULE_LIST.to_bytesc                 C   sR   t  }tj| dddd|_tj| dddd|_tj| dddd|_|S r   )r   int
from_bytesreadr   r   r   )buffmumlr   r   r   parse   s
   z#MINIDUMP_UNLOADED_MODULE_LIST.parseN__name__
__module____qualname__r   r   staticmethodr   r   r   r   r   r      s
    r   c                   @   r   )MINIDUMP_UNLOADED_MODULEc                 C   s"   d | _ d | _d | _d | _d | _d S r   )BaseOfImageSizeOfImageCheckSumTimeDateStampModuleNameRvar	   r   r   r   r   !   s
   
z!MINIDUMP_UNLOADED_MODULE.__init__c                 C   sp   | 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 }|S N   r   Fr   r   )r$   r   r   r%   r&   r'   r(   r   r   r   r   r   (   s   z!MINIDUMP_UNLOADED_MODULE.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|_|S r)   )	r#   r   r   r   r$   r%   r&   r'   r(   )r   mumr   r   r   r   0   s   zMINIDUMP_UNLOADED_MODULE.parseNr   r   r   r   r   r#       s
    r#   c                   @   sP   e Zd Zdd Zedd Zedd Zdd Zd	d
 Zedd Z	dd Z
dS )MinidumpUnloadedModulec                 C   s.   d | _ d | _d | _d | _g | _d | _d | _d S r   )namebaseaddresssize
endaddressmemorysegmentschecksum	timestampr	   r   r   r   r   ;   s   
zMinidumpUnloadedModule.__init__c                 C   sH   t  }| j|_| j|_| j|_| j|_t	
| j||_|j|j |_|S ).
		mod: MINIDUMP_MODULE
		buff: file handle
		)r,   r$   r.   r%   r/   r&   r2   r'   r3   MINIDUMP_STRINGget_from_rvar(   r-   r0   modr   mmr   r   r   r   E   s   zMinidumpUnloadedModule.parsec                    sP   t  }| j|_| j|_| j|_| j|_t	
| j|I dH |_|j|j |_|S )r4   N)r,   r$   r.   r%   r/   r&   r2   r'   r3   r5   aget_from_rvar(   r-   r0   r7   r   r   r   aparseT   s   zMinidumpUnloadedModule.aparsec                 C   s8   |D ]}| j |j  kr| jk rn q| j| qd S r   )r.   start_virtual_addressr0   r1   append)r
   segmentssegmentr   r   r   assign_memory_regionsc   s
   z,MinidumpUnloadedModule.assign_memory_regionsc                 C   s   d| j t| jt| jf S )Nz1Unloaded Module name: %s Size: %s BaseAddress: %s)r-   hexr/   r.   r	   r   r   r   __str__h   s   zMinidumpUnloadedModule.__str__c                   C   s   g dS )N)zModule nameBaseAddressSize
Endaddressr   r   r   r   r   
get_headerk   s   z!MinidumpUnloadedModule.get_headerc                 C   s$   t | jd| j t| jd| j gS )Nz0x%08x)strr-   r.   rA   r/   r0   r	   r   r   r   to_rowt   s
   zMinidumpUnloadedModule.to_rowN)r   r    r!   r   r"   r   r;   r@   rB   rF   rH   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 )MinidumpUnloadedModuleListc                 C   s
   g | _ d S r   )modulesr	   r   r   r   r   ~   s   
z#MinidumpUnloadedModuleList.__init__c                 C   sd   t  }|| jj t|| jj}t	|}t
|jD ]}t	|}|jt	|| q|S r   )rI   seekLocationRvaioBytesIOr   DataSizer   r   ranger   r#   rJ   r=   r,   )dirr   r   chunkr   _r8   r   r   r   r      s   

z MinidumpUnloadedModuleList.parsec           	         s   t  }|| jjI d H  || jjI d H }t|}t	|}t
|jD ]}t	|}t||I d H }|j| q'|S r   )rI   rK   rL   rM   r   rP   rN   rO   r   r   rQ   r   r#   r,   r;   rJ   r=   )	rR   r   r   
chunk_datarS   r   rT   r8   drr   r   r   r;      s   


z!MinidumpUnloadedModuleList.aparsec                 C   s0   g }| t  | jD ]	}| |  q|S r   )r=   r,   rF   rJ   rH   )r
   r   r8   r   r   r   to_table   s
   
z#MinidumpUnloadedModuleList.to_tablec                 C   s   dt |   }|S )Nz== UnloadedModuleList ==
)construct_tablerW   r   r   r   r   rB      s   z"MinidumpUnloadedModuleList.__str__N)	r   r    r!   r   r"   r   r;   rW   rB   r   r   r   r   rI   }   s    

rI   )rN   minidump.common_structsr   r#   r,   rI   r   r   r   r   <module>   s   C