
    5i%                     ~     G d  d          Z  G d d          Z G d d          Z G d d          ZddZddZdS )c                   R    e Zd Zd Zd Zd Zed             Zed             Zd Z	dS )MINIDUMP_LOCATION_DESCRIPTORc                 "    d | _         d | _        d S NDataSizeRvaselfs    M/home/kali/Ninja/venv/lib/python3.11/site-packages/minidump/common_structs.py__init__z%MINIDUMP_LOCATION_DESCRIPTOR.__init__       $-$(((    c                     dS )N    r	   s    r   get_sizez%MINIDUMP_LOCATION_DESCRIPTOR.get_size   s    	
r   c                     | j                             ddd          }|| j                            ddd          z  }|S N   littleF	byteordersignedr   to_bytesr   r
   ts     r   r   z%MINIDUMP_LOCATION_DESCRIPTOR.to_bytes   D    
mQHuEE!tx5AAA!	
(r   c                     t                      }t                              |                     d          dd          |_        t                              |                     d          dd          |_        |S r   )r   int
from_bytesreadr   r   buffmlds     r   parsez"MINIDUMP_LOCATION_DESCRIPTOR.parse   sX    $&&#		!(USS#,NN499Q<<XNNN#'	*r   c                   K   t                      }|                     d           d {V }t                              |dd          |_        |                     d           d {V }t                              |dd          |_        |S r   )r   r"   r    r!   r   r   )r$   r%   r   s      r   aparsez#MINIDUMP_LOCATION_DESCRIPTOR.aparse   s      $&&#IIaLL!x%HH#,IIaLL!NN1(UNCC#'	*r   c                 *    d| j         d| j        }|S NzSize: z File offset: r   r   s     r   __str__z$MINIDUMP_LOCATION_DESCRIPTOR.__str__         $(MMM488<!	
(r   N)
__name__
__module____qualname__r   r   r   staticmethodr&   r(   r+   r   r   r   r   r      s              
   ,   ,    r   r   c                   <    e Zd Zd Zd Zd Zed             Zd ZdS )MINIDUMP_LOCATION_DESCRIPTOR64c                 "    d | _         d | _        d S r   r   r	   s    r   r   z'MINIDUMP_LOCATION_DESCRIPTOR64.__init__%   r   r   c                     dS )N   r   r	   s    r   r   z'MINIDUMP_LOCATION_DESCRIPTOR64.get_size)   s    	r   c                     | j                             ddd          }|| j                            ddd          z  }|S Nr   r   Fr   r   r   s     r   r   z'MINIDUMP_LOCATION_DESCRIPTOR64.to_bytes,   r   r   c                     t                      }t                              |                     d          dd          |_        t                              |                     d          dd          |_        |S r7   )r2   r    r!   r"   r   r   r#   s     r   r&   z$MINIDUMP_LOCATION_DESCRIPTOR64.parse1   sX    &((#		!(USS#,NN499Q<<XNNN#'	*r   c                 *    d| j         d| j        }|S r*   r   r   s     r   r+   z&MINIDUMP_LOCATION_DESCRIPTOR64.__str__8   r,   r   N)	r-   r.   r/   r   r   r   r0   r&   r+   r   r   r   r2   r2   $   sk              
   ,    r   r2   c                   l    e Zd Zd Zed             Zed             Zed             Zed             ZdS )MINIDUMP_STRINGc                 "    d | _         d | _        d S r   )LengthBufferr	   s    r   r   zMINIDUMP_STRING.__init__=   s    $+$+++r   c                     t                      }t                              |                     d          dd          |_        |                     |j                  |_        |S r   )r;   r    r!   r"   r=   r>   )r$   mss     r   r&   zMINIDUMP_STRING.parseA   sJ    "nnTYYq\\x%nPP")ii	""")	)r   c                    K   t                      }|                     d           d {V }t                              |dd          |_        |                     |j                   d {V |_        |S r   )r;   r"   r    r!   r=   r>   )r$   r@   r   s      r   r(   zMINIDUMP_STRING.aparseH   sw      "IIaLL!nnQHunEE")IIbi((((((((")	)r   c                     |                                 }|                    | d           t                              |          }|                    |d           	 |j                            d          S #  Y dS xY wN    z	utf-16-lez<STRING_DECODE_FAILED>)tellseekr;   r&   r>   decodervar$   posr@   s       r   get_from_rvazMINIDUMP_STRING.get_from_rvaP   sw    		#))CT"""))C#
)

;
'
''#
"
"
"s   A6 6A;c                 $  K   |                                 }|                    | d           d {V  t                              |           d {V }|                    |d           d {V  	 |j                            d          S #  Y dS xY wrC   )rE   rF   r;   r(   r>   rG   rH   s       r   aget_from_rvazMINIDUMP_STRING.aget_from_rva[   s      		#		#q##D))))))))"		#q#
)

;
'
''#
"
"
"s   0B
 
BN)	r-   r.   r/   r   r0   r&   r(   rK   rM   r   r   r   r;   r;   <   s             ,   , # # ,# # # ,# # #r   r;   c                       e Zd Zd Zed             Zed             Zd Zd Zd Z	dd	Z
dd
Zed             Zd Zd ZdS )MinidumpMemorySegmentc                 >    d | _         d | _        d | _        d | _        d S r   )start_virtual_addresssizeend_virtual_addressstart_file_addressr	   s    r   r   zMinidumpMemorySegment.__init__g   s'    #$$)!$ $r   c                     t                      }| j        |_        | j        |_        | j        |_        |j        |j        z   |_        |S )zG
		memory_descriptor: MINIDUMP_MEMORY_DESCRIPTOR
		buff: file_handle
		)rO   StartOfMemoryRangerQ   r   rR   r   rT   rS   )memory_decriptorr$   mmss      r   
parse_miniz MinidumpMemorySegment.parse_minim   sF     	#.A#&#(+/#5@#	*r   c                     t                      }| j        |_        | j        |_        ||_        |j        |j        z   |_        |S r   )rO   rV   rQ   r   rR   rT   rS   )rW   rI   rX   s      r   
parse_fullz MinidumpMemorySegment.parse_fullz   sA    #.A#&#(#5@#	*r   c                 6    || j         k    r|| j        k     rdS dS )NTF)rQ   rS   )r
   	virt_addrs     r   inrangezMinidumpMemorySegment.inrange   s'    $,,,T=U1U1U
$	r   c                 X   || j         k    s|| j        k     rt          d          ||z   | j         k    rt          d          |                                }|| j        z
  }|                    | j        |z   d           |                    |          }|                    |d           |S NzReading from wrong segment!zRead would cross boundaries!rD   rS   rQ   	ExceptionrE   rF   rT   r"   r
   virtual_addressrR   file_handlerrJ   offsetdatas          r   r"   zMinidumpMemorySegment.read   s    t///?TE_3_3_	0	1	11TD444	1	2	22#T77&D+f4a888			4	 	 $C	+r   c                   K   || j         k    s|| j        k     rt          d          ||z   | j         k    rt          d          |                                }|| j        z
  }|                    | j        |z   d           d {V  |                    |           d {V }|                    |d           d {V  |S r`   ra   rc   s          r   areadzMinidumpMemorySegment.aread   s      t///?TE_3_3_	0	1	11TD444	1	2	22#T77&$1F:A>>>>>>>>>  &&	&	&	&	&	&	&$#q!!!!!!!!!	+r   F   c                    t          |          | j        k    rg S |                                }|                    | j        d           g }|du rt          || j                  }d}d}t          |          | j        k     r|dz  }|| j        t          |          z
  k    r| j        t          |          z
  }||                    |          z  }|                    |          }	|	dk    r!|                    |d           | j        |	z   gS t          |          | j        k     n|                    | j                  }|                    |d           d}
t          |          t          |          k    rx|                    |          }	|	dk    r|S |	                    |	|
z   | j        z              ||	dz   d          }|
|	dz   z  }
|du r|S t          |          t          |          k    x|                    |d           |S NrD   Tr      
lenrR   rE   rF   rT   minr"   findrQ   appendr
   patternre   
find_first	chunksizerJ   flrg   imarkerrf   s              r   searchzMinidumpMemorySegment.search   s   \\DI
9#D+Q///	"49di((9
41	TTY		FADID		)**)c$ii'YLi(((DYYwF||sA'&011 
TTY		 

DI
&
&4S!6	TS\\	!	!YYwF||YIIfvo ::;;;q		?D
fqjFTY 
TS\\	!	! C	)r   c                 Z  K   t          |          | j        k    rg S |                                }|                    | j        d           d {V  g }|du rt          || j                  }d}d}t          |          | j        k     r|dz  }|| j        t          |          z
  k    r| j        t          |          z
  }||                    |           d {V z  }|                    |          }	|	dk    r'|                    |d           d {V  | j        |	z   gS t          |          | j        k     nd}
|                    | j                   d {V }|                    |d           d {V  t          |          t          |          k    rx|                    |          }	|	dk    r|S |	                    |	|
z   | j        z              ||	dz   d          }|
|	dz   z  }
|du r|S t          |          t          |          k    x|                    |d           d {V  |S rl   ro   rt   s              r   asearchzMinidumpMemorySegment.asearch   s     \\DI
9#$11555555555	"49di((9
41	TTY		FADID		)**)c$ii'Y,##I.........DYYwF||S!$$$$$$$$$'&011 
TTY		 6!!$),,
,
,
,
,
,
,4			3	"	""""""""	TS\\	!	!YYwF||YIIfvo ::;;;q		?D
fqjFTY 
TS\\	!	! 	#q!!!!!!!!!	)r   c                      g d} | S )N)zVA StartRVASizer   )r   s    r   
get_headerz MinidumpMemorySegment.get_header   s      !
 
(r   c                 |    t          | j                  t          | j                  t          | j                  g}|S r   hexrQ   rT   rR   r   s     r   to_rowzMinidumpMemorySegment.to_row  s7    t!""tty>>!
 
(r   c                     dt          | j                  dt          | j                  dt          | j                  }|S )Nz
VA Start: z, RVA: z, Size: r   r   s     r   r+   zMinidumpMemorySegment.__str__
  sH     +.t/I+J+J+J+JCPTPgLhLhLhLhjmnrnwjxjxjxy!	
(r   N)Frj   )r-   r.   r/   r   r0   rY   r[   r^   r"   ri   r{   r}   r   r   r+   r   r   r   rO   rO   f   s        ! ! ! 
 
 ,
   ,  
    ( ( ( (T( ( ( (V   ,      r   rO   r5   .rD   c                    g }	  |dd           n# t           $ r
 t          }Y nw xY w |dt          |           |          D ]}| |||z            }d}d}	 |dt          |                    D ]}
|
|dz  k    r|dz  }||
         }
t          |
t                    st          |
          }
t          |
                              dd          }
t          |
          dk    rd|
z   }
||
dz   z  }|                    d          }d}|D ]N}t          |t                    st          |          }d	|cxk    rd
k     rn n|t          |          z  }I||z  }O|dk    r6|
                    dt          |dz  dz             z   dz   |||fz             Q|
                    dt          |dz  dz             z   dz   ||z   |||fz             d                    |          S )z
	@brief Return {src} in hex dump.
	@param[in] length	{Int} Nb Bytes by row.
	@param[in] sep		{Char} For the text part, {sep} will be used for non ASCII char.
	@return {Str} The hexdump

	@note Full support for python2 and python3 !
	rD   rm    F    0x0       z	%08x:  %-   zs  |%s|z%08x(+%04x):  %-
)	NameErrorrangerp   
isinstancer    ordr   replacestripchrrs   strjoin)srclengthsepstartresultxrangery   subSrchexaisMiddlehtextcs                r   hexdumpr     s:    &1++++   &&& &CHHf
%
% a aQq6z?&	$(6!CKK   	 	a6!8mmCKDay1
Q

 AA
1vv~~d21	!ffkkAA1S5=44	C$	$  a
Q

 AA
a$CFFNDDCKDD
aZZ	==+c&#,q.111);4NOOOO	==$Sa%8%88BuQwPQSWY]F^^____		&s    %%Tc                 f   g }| D ]m}t          d |D                       D ]Q\  }}|t          |          k    r(|                    d           |t          |          k    (|||         k    r|||<   Rnd}t          |          D ]0\  }}|dt          |          z   dz   t          |          z   dz   z  }1t          |          dk    rdS |dd         }d}t          |           D ]K\  }}| |j        | d	z   z  }|dk    r0|r.|d
t          |          dt          |          dz
  z  z   z  d	z   z  }L|S )z4Prints a formatted table given a 2 dimensional arrayc                 ,    g | ]}t          |          S r   )rp   ).0xs     r   
<listcomp>z#construct_table.<locals>.<listcomp>C  s    111qCFF111r   rD   r   {:z} | Nr   -r   rm   )	enumeraterp   rs   r   formatsum)	linesseparate_headwidthslinery   rR   print_stringwidthr   s	            r   construct_tabler   >  s      T11D11122  vqF}}Q Fvayvay	 &!! < <WQu3Q<#%E

2V;;<<!	6SbS!  5 5VQtT"T))1Avv-v#s6{{1c&kk!m,,
-
44Q	r   N)r5   r   rD   )T)r   r2   r;   rO   r   r   r   r   r   <module>r      s          B       0(# (# (# (# (# (# (# (#Tf f f f f f f fT, , , ,\
 
 
 
 
 
r   