o
    j                      @   sZ   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G dd dZdS )    N)*c                   @   sP   e Zd Zdd Zedd Zedd Zdd Zed	d
 Zdd Z	dd Z
dS )MinidumpModulec                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S N)namebaseaddresssize
endaddressversioninfochecksum	timestampself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/ModuleListStream.py__init__
   s   
zMinidumpModule.__init__c                 C   sP   t  }| j|_| j|_| j|_| j|_t	
| j||_| j|_|j|j |_|S ).
		mod: MINIDUMP_MODULE
		buff: file handle
		)r   BaseOfImager   SizeOfImager   CheckSumr
   TimeDateStampr   MINIDUMP_STRINGget_from_rvaModuleNameRvar   VersionInfor	   r   modbuffmmr   r   r   parse   s   zMinidumpModule.parsec                    sX   t  }| j|_| j|_| j|_| j|_t	
| j|I dH |_| j|_|j|j |_|S )r   N)r   r   r   r   r   r   r
   r   r   r   aget_from_rvar   r   r   r	   r   r   r   r   r   aparse$   s   zMinidumpModule.aparsec                 C   s   | j |  ko| jk S   S r   )r   r   )r   
memory_locr   r   r   inrange4      zMinidumpModule.inrangec                   C   s   g dS )N)zModule nameBaseAddressSize
Endaddress	Timestampr   r   r   r   r   
get_header7   s   zMinidumpModule.get_headerc                 C   s,   t | jd| j t| jd| j d| j gS )Nz0x%08x)strr   r   hexr   r   r   r   r   r   r   to_rowA   s   zMinidumpModule.to_rowc                 C   s   d| j | j| j| jf S )NzAModule name: %s BaseAddress: 0x%08x Size: 0x%x Endaddress: 0x%08x)r   r   r   r   r   r   r   r   __str__K      zMinidumpModule.__str__N)__name__
__module____qualname__r   staticmethodr   r    r"   r(   r+   r,   r   r   r   r   r   	   s    



	
r   c                   @   sD   e Zd Zdd Zdd Zdd Zedd Zed	d
 Zdd Z	dS )VS_FIXEDFILEINFOc                 C   sR   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d S r   )dwSignaturedwStrucVersiondwFileVersionMSdwFileVersionLSdwProductVersionMSdwProductVersionLSdwFileFlagsMaskdwFileFlagsdwFileOS
dwFileTypedwFileSubtypedwFileDateMSdwFileDateLSr   r   r   r   r   P   s   
zVS_FIXEDFILEINFO.__init__c                 C   s   dS )N4   r   r   r   r   r   get_size_   s   zVS_FIXEDFILEINFO.get_sizec                 C   s  | 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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
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   littleF	byteordersigned)r3   to_bytesr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r   tr   r   r   rH   b   s   zVS_FIXEDFILEINFO.to_bytesc                 C   s   t t| S r   )r2   r   ioBytesIO)datar   r   r   
from_bytesr   s   zVS_FIXEDFILEINFO.from_bytesc                 C   sB  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|_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 rB   )r2   intrN   readr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   )r   vfr   r   r   r   v   s   zVS_FIXEDFILEINFO.parsec                 C   .   d}| j D ]}|d|t| j | f 7 }q|S N z	%s : %s
__dict__r)   r   rJ   kr   r   r   r,         
zVS_FIXEDFILEINFO.__str__N)
r.   r/   r0   r   rA   rH   r1   rN   r   r,   r   r   r   r   r2   O   s    

r2   c                   @   s8   e Zd Zdd Zdd Zdd Zedd Zd	d
 ZdS )MINIDUMP_MODULEc                 C   sF   d | _ d | _d| _d | _d | _d | _d | _d | _d| _d| _	d | _
d S )Nr   )r   r   r   r   r   r   CvRecord
MiscRecord	Reserved0	Reserved1
ModuleNamer   r   r   r   r      s   
zMINIDUMP_MODULE.__init__c                 C   s   dt    dt    S )N(      )r2   rA   MINIDUMP_LOCATION_DESCRIPTORr   r   r   r   rA      r#   zMINIDUMP_MODULE.get_sizec                 C   s   | 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 }|| j 7 }|| j	jdddd7 }|| j
jdddd7 }|S N   rD   FrE   rC   )r   rH   r   r   r   r   r   r[   r\   r]   r^   rI   r   r   r   rH      s   zMINIDUMP_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|_t	
| |_t
| |_t
| |_tj| dddd|_tj| dddd|_|S rc   )rZ   rO   rN   rP   r   r   r   r   r   r2   r   r   rb   r[   r\   r]   r^   )r   r   r   r   r   r      s   zMINIDUMP_MODULE.parsec                 C   rR   rS   rU   rW   r   r   r   r,      rY   zMINIDUMP_MODULE.__str__N)	r.   r/   r0   r   rA   rH   r1   r   r,   r   r   r   r   rZ      s    
rZ   c                   @   s0   e Zd Zdd Zdd Zdd Zedd Zd	S )
MINIDUMP_MODULE_LISTc                 C   s   d | _ g | _d S r   )NumberOfModulesModulesr   r   r   r   r      s   
zMINIDUMP_MODULE_LIST.__init__c                 C   s   dt | jt    S )NrC   )lenrg   rZ   rA   r   r   r   r   rA      r-   zMINIDUMP_MODULE_LIST.get_sizec                 C   s2   t | jjdddd}| jD ]}|| 7 }q|S rB   )rh   rg   rH   )r   rJ   moduler   r   r   rH      s   
zMINIDUMP_MODULE_LIST.to_bytesc                 C   sD   t  }tj| dddd|_t|jD ]}|jt	|  q|S rB   )
re   rO   rN   rP   rf   rangerg   appendrZ   r   )r   mml_r   r   r   r      s
   zMINIDUMP_MODULE_LIST.parseN)r.   r/   r0   r   rA   rH   r1   r   r   r   r   r   re      s    re   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 )MinidumpModuleListc                 C   s
   g | _ d S r   )modulesr   r   r   r   r      s   
zMinidumpModuleList.__init__c                 C   sV   t  }|| jj t|| jj}t	|}|j
D ]}|jt	|| q|S r   )rn   seekLocationRvarK   rL   rP   DataSizere   r   rg   ro   rk   r   )dirr   rJ   chunkmtlr   r   r   r   r      s   

zMinidumpModuleList.parsec                    sr   t  }|| jjI d H  || jjI d H }t|}t	|}|j
D ]}t||I d H }|j| q%|S r   )rn   rp   rq   rr   rP   rs   rK   rL   re   r   rg   r   r    ro   rk   )rt   r   rJ   
chunk_dataru   rv   r   xr   r   r   r       s   


zMinidumpModuleList.aparsec                 C   s0   g }| t  | jD ]	}| |  q|S r   )rk   r   r(   ro   r+   )r   rJ   r   r   r   r   to_table   s
   
zMinidumpModuleList.to_tablec                 C   s   dt |   }|S )Nz== ModuleList ==
)construct_tablery   rI   r   r   r   r,      s   zMinidumpModuleList.__str__N)	r.   r/   r0   r   r1   r   r    ry   r,   r   r   r   r   rn      s    
	
rn   )rK   minidump.common_structsr   r2   rZ   re   rn   r   r   r   r   <module>   s   F@6