
    lLj                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
  ee      j                         j                  d   Zedz  Zed	z  Zdd
ZddZddZddZddZddZedk(  r e        yy)aB  Classify raw references to the status/comment backing base.

The absolute writer scan intentionally looked for memory operands and therefore
left references to 0x004576d8 itself as "unclassified" immediates.  For the
status/comment selector these immediates are important:

* two sites bind object+0xa8 to 0x004576d8 with `c7 80 a8 00 00 00 ...`;
* two sites derive sub-pointers inside the backing block;
* two sites pass the whole 0x72-byte block to save/load-like routines.

This proves the backing-base bridge without pretending that selector byte +0
itself is written here.
    )annotationsN)Counter)Path)Any   outwebc                    	 t        j                  t        | z  j                  d            }t        |t              r|S i S # t        $ r i cY S w xY w)Nutf-8encoding)jsonloadsOUT	read_textFileNotFoundError
isinstancedict)namedatas     5tools/build_status_comment_backing_base_ref_review.py	load_jsonr      sS    zz3:00'0BC dD)41r1  	s   ,A AAc                V    t        j                  | dd      S t        |       d      S )N T)quote)htmlescapestr)values    r   hr    %   s%    ;;U]r$GGE
$GG    c                    t        | j                  dd            j                         }t        | j                  dd            }d|v rddddS d	|v rd
dddS d|v rddddS d|v rddddS ddd| ddS )N
contextHexr   refVaHexzc7 80 a8 00 00 00 d8 76 45 00object-a8-backing-base-bindhighznwrites immediate 0x004576d8 into object+0xa8; this is the base binding used by 0x40 status/menu selector reads)classification
confidencemeaningzb8 d8 76 45 00 83 c0 20zbacking-subpointer-plus-0x20z=derives pointer 0x004576d8+0x20 for adjacent status/menu datazb8 d8 76 45 00 83 c0 14zbacking-subpointer-plus-0x14z=derives pointer 0x004576d8+0x14 for adjacent status/menu dataz6a 72 68 d8 76 45 00backing-block-transfer-argzmedium-highzepushes backing base with size 0x72 to an imported/helper routine; likely save/load or block copy pathzunclassified-base-immediatelowzraw immediate reference at z%; no specific backing role recognized)r   getlower)rowcontextrefs      r   classify_refr1   )   s    #'',+,224G
cggj"%
&C&'1;  H
 	

 !G+< V
 	

 !G+< V
 	

 (:'~
 	
 805Z[ r!   c                 \   t        d      } | j                  dg       }g }t        |t              r|ng D ]R  }t        |t              st        |      }|j                  i dD ci c]  }||j                  |d       c}|       T t        d |D              }t        d |D              }|D cg c]  }|d   dk(  s| }}|D cg c]  }|d   d	k(  s| }	}d
dt        |      t	        |      t	        |      t        |      t        |	      ddd	}
dddg|
|dS c c}w c c}w c c}w )Nz'status_comment_backing_writer_scan.jsonoffset0Refs)r$   functionVaHexfunctionEndVaHexr#   r   c              3  &   K   | ]	  }|d      yw)r'   N .0r.   s     r   	<genexpr>zbuild.<locals>.<genexpr>Z   s     ;sS)*;s   c              3  @   K   | ]  }|j                  d d        yw)r4   r   N)r,   r8   s     r   r:   zbuild.<locals>.<genexpr>[   s     Kscggor:Ks   r'   r%   r*   
0x004576d80x72FzBacking-base binding is proven: object+0xa8 is assigned 0x004576d8 at two sites. These sites establish the status/menu selector base, but they do not write the selector byte at backing +0.)	backingBaseVaHexbackingSizeHexoffset0RawRefCountclassificationCountsfunctionCountsobjectA8BackingBaseBindCountblockTransferArgCountselectorByteValueWriterProvendecisionr   z-hwanse-status-comment-backing-base-ref-reviewz+out/status_comment_backing_writer_scan.json)versionkindsourceArtifactssummaryrows)	r   r,   r   listr   r1   appendr   len)backingrefsrK   r.   clskeycountsfunction_countsbase_bind_rowsblock_transfer_rowsrJ   s              r   buildrW   K   s^   ABG;;}b)DD!$-t2 	
#t$34stS3R((t	
		
 ;d;;FKdKKO%)dcS1A-BFc-ccdNd*.h3#6F2GKg2g3hh( !$i $V/(+N(;!$%8!9).zG ?IJ / u ehs   #D1D$?D$	D)D)c                    dj                  d | d   j                         D              }dj                  d | d   D              }d| d| dS )	Nr   c              3  X   K   | ]"  \  }}d t        |       dt        |       d $ yw)z<div class='card'><b>z
</b><span>z</span></div>Nr    )r9   kvs      r   r:   zrender_html.<locals>.<genexpr>v   s3      Aq  !vZ!v]Cs   (*rJ   c              3     K   | ]a  }d t        |d          dt        |d          dt        |d          dt        |d          dt        |d	          d
t        |d          d c yw)z<tr><td><code>r$   z</code><br><code>r4   z</code></td><td>r'   z<br><small>r(   z</small></td><td>r)   z</td><td><code>r#   z</code></td></tr>NrZ   r8   s     r   r:   zrender_html.<locals>.<genexpr>z   s       	s:'((9!C<P:Q9R S%&'(Ac,6G4H3I JY ! "s<()* +		s   A'A)rK   u	  <!doctype html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Status Comment Backing Base Reference Review</title>
<style>
  :root { color-scheme: light dark; }
  body { margin:24px; font-family:system-ui,-apple-system,Segoe UI,sans-serif; line-height:1.45; }
  h1 { margin:0 0 8px; font-size:24px; }
  .muted { color:#667085; }
  .cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:10px; margin:16px 0; }
  .card { border:1px solid #d0d5dd; border-radius:8px; padding:10px 12px; background:rgba(127,127,127,.05); }
  .card b { display:block; color:#667085; font-size:12px; }
  .card span { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; overflow-wrap:anywhere; }
  .scroll { overflow-x:auto; }
  table { width:100%; border-collapse:collapse; }
  th,td { border:1px solid #d0d5dd; padding:7px 8px; vertical-align:top; }
  th { text-align:left; background:rgba(127,127,127,.08); }
  code { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12px; }
</style>
<h1>Status Comment Backing Base Reference Review</h1>
<p class="muted">기존 writer scan에서 unclassified였던 <code>0x004576d8</code> 즉시값 참조 6개를 문맥별로 재분류합니다.</p>
<div class="cards">z</div>
<div class="scroll"><table>
<thead><tr><th>reference/function</th><th>classification</th><th>meaning</th><th>context</th></tr></thead>
<tbody>z</tbody>
</table></div>
)joinitems)r   cardsrK   s      r   render_htmlra   u   st    GG O))+ E 77  < D* 7  	v 1 r!   c                    t               } t        j                  d       t        j                  d       t        dz  j	                  t        j                  | dd      d       t        d	z  j	                  t        |       d       y )
NT)exist_okz+status_comment_backing_base_ref_review.jsonF   )ensure_asciiindentr   r   z+status_comment_backing_base_ref_review.html)rW   r   mkdirWEB
write_textr   dumpsra   )r   s    r   mainrk      sy    7DIItIIItI88DD

4eA6 E  	88DDD E r!   __main__)r   r   returndict[str, Any])r   r   rm   r   )r.   rn   rm   rn   )rm   rn   )r   rn   rm   r   )rm   None)__doc__
__future__r   r   r   collectionsr   pathlibr   typingr   __file__resolveparentsROOTr   rh   r   r    r1   rW   ra   rk   __name__r7   r!   r   <module>rz      s    #      H~''*
Ul
Ul2HD'T(V zF r!   