
    UHj;                       d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZ  ee      j                         j                  d   Zedz  ZdZd	Zd
dddddddZddddddddZddddddddddddZddd d!d!d"d#d$d%d&	Zd4d'Zd5d(Zd6d)Zd7d*Zd8d+Zd9d,Z	 	 	 	 	 	 	 	 	 	 	 	 d:d-Zd;d.Zd<d/Zd<d0Z efd=d1Z!d>d2Z"e#d3k(  r e"        yy)?zTScan direct dword bridges between map1_01a confirmed and frontier selector contexts.    )annotationsN)Path)read_sectionsva_to_offset   outmap1_01amap2_02dzconfirmed entry selectorz0:0P ip5P 2P )labelselectorrootVascanStartVa	scanEndVarecordRangeStartVarecordRangeEndVazselector-only frontierz2:0T i.T D+T ix.T zfrontier root 2:0zfrontier pointer nodezfrontier map1_01a leafzfrontier shared leafzfrontier reader/resource gatez%frontier source scene record map1_01az%frontier target scene record map2_02d)r   i)T i*T i*T i*T i*T i*T i*T i+T r   i+T zconfirmed root 0:0zconfirmed pointer nodezconfirmed map1_01a leafzconfirmed shared leafzconfirmed map1_02b leafz%confirmed entry scene record map1_01az%confirmed event scene record map1_02bz%confirmed event dispatch neighborhood)	r   i42P iD2P i`2P i|2P i2P r   iP3P i\3P c                    d| dS )N0x08x )values    D/home/exedev/hwanse/tools/summarize_map1_01a_selector_bridge_refs.pyva_hexr   @   s    c{    c                4    t        |        dt        |       S )Nz..)r   )start_vaend_vas     r   	range_hexr!   D   s    Xr&.!122r   c                v    t        ||      }||dz   t        |       kD  ry t        j                  d| |      d   S )N   z<Ir   )r   lenstructunpack_from)datasectionsvaoffsets       r   dword_at_var+   H   s?    (B'F~!c$i/dD&1!44r   c                    | d   | d   | d   t        | d         | d   | d   t        | d   | d         | d   | d   t        | d   | d         d
S )	Nr   r   r   r   r   r   r   )
r   r   r   	rootVaHexr   r   scanRangeHexr   r   recordRangeHexr   r!   )contexts    r   context_summaryr2   O   s}    !J'(#GH-.}-[)!'-"8'+:NO%&:;#$67#G,@$A7K]C^_ r   c                    t        | j                               D cg c]  \  }}|t        |      |d c}}S c c}}w )N)r)   vaHexr   )sorteditemsr   )targetsr)   r   s      r   exact_target_rowsr8   ^   s>      0B F2J7  s   :c                    | D cg c]<  }|d   |d   t        |d         |d   t        |d         t        |d   |d         d> c}S c c}w )Nr   startVaendVa)r   r:   
startVaHexr;   endVaHexrangeHexr0   )rangesrows     r   target_range_rowsrA   e   sg     
  \9~ Y0\s7|,!#i.#g,?	

 
 
s   AA	c           
        g }d}d}t        |d   |d   d      D ]  }t        | ||      }	|	|dz  }|dz  }|j                  |	      }
|D cg c]  }|d   |	cxk  r|d   k  rn n|d    }}|
|sY|j                  |t	        |      |	t	        |	      |
|d        t        |d   |d         ||t        |      t        |      t        |      |dS c c}w )	Nr   r:   r;   r#   r   r   )sourceVasourceVaHexr   valueHex
exactLabelrangeLabels)sourceRangereadableDwordCountunreadableDwordCountexactTargetstargetRangesdwordHitCounthits)	ranger+   getappendr   r!   r8   rA   r$   )r'   r(   source_rangeexact_targetstarget_rangesrN   readable_dwordsunreadable_dwordsr)   r   exact_labelr@   range_labelss                r   scan_range_for_targetsrY   s   s&    DOL+\'-BAF D(B/="1#''. %
9~5W5 L
 

 |!":u%'
 	. !i!8,w:OP- 1)-8)-8T 
s    Cc                   t        |       }dt        d   t        d   dg}dt        d   t        d   dg}t        | |t        d   t        d   dt        |      }t        | |t        d   t        d   dt
        |      }|d	   d
kD  xs |d	   d
kD  }d}t        t        t        t              t        t              |||dg d|d
S )Nzconfirmed entry record clusterr   r   )r   r:   r;   z%frontier selector-only record clusterr   r   )r:   r;   rM   r   aj  No direct dword pointer/data bridge was found between the confirmed 0:0 map1_01a entry context and the selector-only 2:0 map1_01a -> map2_02d frontier context. This is not a full VM execution proof, but it keeps the contexts separated until a strict hotspot/source coordinate or a runtime state trace proves selector 2:0 is reached from the confirmed entry path.blocked)zUThis scan only checks direct dword values in the known selector/root context windows.zLIt does not prove dynamic VM execution order or runtime branch-state values.ztPromotion still requires a strict map1_01a hotspot/source coordinate or a confirmed runtime trace into selector 2:0.)
mapfrontierTargetconfirmedContextfrontierContextconfirmedToFrontierfrontierToConfirmedbridgeFoundpromotionStatuslimitations
conclusion)	r   CONFIRMED_CONTEXTFRONTIER_CONTEXTrY   FRONTIER_EXACT_TARGETSCONFIRMED_EXACT_TARGETSMAPFRONTIER_TARGETr2   )exer(   confirmed_target_rangesfrontier_target_rangesconfirmed_to_frontierfrontier_to_confirmedbridge_foundre   s           r   build_summaryrr      s   S!H 6()=>&'9:	
 ='(<=%&89	
 3(7&{3	
 		 3'6%k2	
 	 	 	o.2 	6 1A5 
	T  )+,=>*+;<44#$

 ! r   c                    | d   }| d   }| d   }| d   }ddd| d    d	d
| d    d	d|d    d|d    d	d|d    d|d    d	d| d    d| d    d	d| d   dddddd|d    d|d    d|d    d|d    d|d    d d!|d    d|d    d|d    d|d    d|d    d dd"dd#dd$d%g}|d&   D ]   }|j                  d'|d(    d|d)    d*       " |j                  g d+       |d&   D ]   }|j                  d'|d(    d|d)    d*       " |j                  g d,       |d-   s|d-   s|j                  d.       nyd/|fd0|ffD ]n  \  }}|d-   D ]a  }	|	j                  d1      xs d2g|	j                  d3      xs g z   }
|j                  d4| d5|	d6    d7|	d8    d9d:j                  |
       d;	       c p |j                  g d<       |j                  d= | d>   D               |j                  d       d?j                  |      S )@Nr^   r_   r`   ra   z# map1_01a Selector Bridge Refs z- map: `r\   `z- frontier target: `r]   z- confirmed selector/root: `r   z` / `r-   z- frontier selector/root: `z- bridge found: rb   z- promotion status: `rc   re   z## Scan Summaryz:| direction | source range | target context | dword hits |z| --- | --- | --- | ---: |z| confirmed -> frontier | `rH   z` | `z` `r/   z` | rM   z hits |z| frontier -> confirmed | `z## Target Exact Valuesz### Frontier Targets| VA | label || --- | --- |rK   z| `r4   r   z |)rt   z### Confirmed Targetsrt   rv   rw   )rt   z## Hitsrt   rN   zT- 0 hits in both directions; known contexts remain different selector/root contexts.confirmed -> frontierfrontier -> confirmedrF   -rG   - z: `rD   z` = `rE   z` (, ))rt   z## Limitationsrt   c              3  &   K   | ]	  }d |   yw)r{   Nr   .0items     r   	<genexpr>zmarkdown.<locals>.<genexpr>  s     @2dV@s   rd   
)rQ   extendrP   join)summary	confirmedfrontierc2ff2clinesr@   	directionscanhitlabelss              r   markdownr      s   *+I()H
'
(C
'
(C)

75>"!$
w'789;
&y'<&=U9[CYBZZ[\
%hz&:%;5+AV@WWXY
7=123
(9 :;1=


D$)#m*<)= >$%S+)>(?uXN^E_D``d?#$G-
 *#m*<)= >*%&c)K*@)AyQaGbFccg?#$G- 	 

A!ED >" ?s3w<.S\N"=>?	LLUV>" ?s3w<.S\N"=>?	LL$%v;s6{kl!8# >AXZ]@^_ 	OItF| '',/637377=;Q;WUWX3s='9&:%J?PPSTXT]T]^dTeSffgh	 
LL+,	LL@)?@@	LL99Ur   c                &   | d   }| d   }| d   }| d   }dt        j                  |d          dt        j                  |d          d	t        j                  |d
          dt        j                  |d          d|d    ddt        j                  |d          dt        j                  |d          d	t        j                  |d
          dt        j                  |d          d|d    dg}g }|d   D ]F  }|j                  dt        j                  |d          dt        j                  |d          d       H |d   D ]F  }|j                  dt        j                  |d          dt        j                  |d          d       H |d   s|d   rg }d|fd|ffD ]  \  }	}
|
d   D ]  }|j                  d      xs dg|j                  d      xs g z   }|j                  dt        j                  |	       dt        j                  |d          d t        j                  |d!          d"t        j                  d#j	                  |             d$	         d%d&j	                  |      z   d'z   }nd(}d&j	                  d) | d*   D              }d+j	                  g d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@t        j                  |d          d	t        j                  |d
          dAt        j                  |d          d	t        j                  |d
          dB| dC    dDt        j                  | dE          dFdGt        j                  | dH          dIdJdK|dLdMdN|dLdOdP| dQdR| d'dSdTd&      S )UNr^   r_   r`   ra   z/<tr><td>confirmed -&gt; frontier</td><td><code>rH   z</code></td><td><code>r   z</code> <code>r-   z</code> / <code>r/   z</code></td><td>rM   z hits</td></tr>z/<tr><td>frontier -&gt; confirmed</td><td><code>rK   z<tr><td>frontier</td><td><code>r4   r   z
</td></tr>z <tr><td>confirmed</td><td><code>rN   rx   ry   rF   rz   rG   <li>z: <code>rD   z</code> = <code>rE   z	</code> (r|   z)</li>z<ul>rt   z</ul>zY<p>0 hits in both directions; known contexts remain different selector/root contexts.</p>c              3  N   K   | ]  }d t        j                  |       d  yw)r   z</li>N)htmlescaper   s     r   r   zhtml_page.<locals>.<genexpr>U  s#     ]dDT!2 359]s   #%rd   r   z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z.  <title>map1_01a Selector Bridge Refs</title>z	  <style>zg    :root { color-scheme: dark; font-family: system-ui, sans-serif; background: #101010; color: #eee; }z&    body { margin: 0; padding: 24px; }z,    h1 { margin: 0 0 8px; font-size: 24px; }z/    h2 { margin: 24px 0 8px; font-size: 18px; }z<    p { max-width: 1100px; color: #bbb; line-height: 1.45; }z[    table { width: 100%; border-collapse: collapse; margin: 12px 0 20px; font-size: 13px; }zi    th, td { border-bottom: 1px solid #303030; padding: 7px 8px; text-align: left; vertical-align: top; }zF    th { position: sticky; top: 0; background: #181818; color: #ddd; }z    code { color: #d7f0ff; }z
  </style>z</head>z<body>z(  <h1>map1_01a Selector Bridge Refs</h1>z#  <p>confirmed selector/root <code>z&</code>; frontier selector/root <code>z</code>; bridge found: rb   z; promotion status <code>rc   z</code></p>z  <p>re   z</p>z  <h2>Scan Summary</h2>zy  <table><thead><tr><th>direction</th><th>source range</th><th>target context</th><th>dword hits</th></tr></thead><tbody>z  </tbody></table>z  <h2>Target Exact Values</h2>zQ  <table><thead><tr><th>context</th><th>VA</th><th>label</th></tr></thead><tbody>z  <h2>Hits</h2>z  z  <h2>Limitations</h2>z  <ul>z</body>z</html>)r   r   rQ   rP   r   )r   r   r   r   r   	scan_rowstarget_rowsr@   	hit_itemsr   r   r   r   hit_htmlrd   s                  r   	html_pager     sl   *+I()H
'
(C
'
(CS%789 :Xj%9:; <[[+!678 9[[*:!;<= >'( )S%789 :Yz%:;< =[[;!789 :[[+;!<=> ?'( )I, K>" 
S\23 4;;s7|,- .	

 >" 
S\23 4;;s7|,- .	

 6{c&k	!8# >AXZ]@^_ 		OItF| '',/637377=;Q;WUWX  {{9-.ht{{3}CU7V6W X![[Z9: ;DIIf$567 8		 BGGI..8n'']gmF\]]K99 *** 	* 	#	*
 	Q* 	9* 	* 	r* 	1* 	7* 	:* 	G* 	f* 	t* 	Q*  	'!*" 	#*$ 	%*& 	'*( 	3)** .dkk)J:O.P-Q RY{345 6Xj123>$++hWbNcBdAe f /0 1W%6789		F+*4 GL123485*6 	"7*8 	D9*: 
;*< 	=*> 	)?*@ 	\A*B 
C*D 	E*F 	G*H XJI*J 	!K*L U#M*N 	O*P 	Q*R 	S* * *r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok"map1_01a_selector_bridge_refs.jsonF   )ensure_asciiindentr   zutf-8)encoding)mkdir
write_textjsondumps)r   out_dirs     r   write_outputsr     sD    MM$M.33??

7q9D@ @ r   c                 v   t        j                  t              } | j                  dt        t
        dz         | j                  dt        t               | j                         }t        |j                  j                               }t        ||j                         t        d|j                  dz          y )N)descriptionz--exezHwanse2.exe)typedefaultz	--out-dirz'wrote map1_01a selector bridge refs -> r   )argparseArgumentParser__doc__add_argumentr   ROOTOUT
parse_argsrr   rl   
read_bytesr   r   print)parserargsr   s      r   mainr     s    $$9F
dD=4HI
$<DDHH//12G'4<<(	3DLLCg4g3h
ijr   __main__)r   intreturnstr)r   r   r    r   r   r   )r'   bytesr(   
list[dict]r)   r   r   z
int | None)r1   dictr   r   )r7   dict[int, str]r   r   )r?   r   r   r   )r'   r   r(   r   rR   r   rS   r   rT   r   r   r   )rl   r   r   r   )r   r   r   r   )r   r   r   r   r   None)r   r   )$r   
__future__r   r   r   r   r%   pathlibr   probe_exe_scene_tablesr   r   __file__resolver   r   r   rj   rk   rf   rg   rh   ri   r   r!   r+   r2   r8   rA   rY   rr   r   r   r   r   __name__r   r   r   <module>r      sp   Z "      > H~''*
Ul ($"  &$"  $'(((&&&/77  %()'')777
 35(
(( ( "	(
 ( 
(V=@9xfR 25 k zF r   