o
    cZŽhà  ã                   @   sŽ   d dl Z d dlZd dlZd dlZd dlZe d¡Ze d¡Ze d¡Ze d¡Z	dd„ Z
dd	„ Ze  ¡ dd
d„ƒZe  ¡ dd„ ƒZdd„ ZdS )é    Nz1\s*/\*\w{4}\*/\s*([^;]*;)\s*/\* 0x(\w{16}) \*/\s*z\s*/\* 0x(\w{16}) \*/\s*z\s*Function : (\w+)\s*z(.*BRA(?:\.U)? )(0x\w+);c              
   C   sÀ   t t | ¡ d¡dƒ}|d? d@ }|d? d@ }|d? d@ }|d? d@ }|d	? d
@ }|dkr/dnd}|dkr7dnt|ƒ}|dkrAdnt|ƒ}	|dkrKdn|d›}
|
› d|	› d|› d|› d|d›	S )Né   é   é)   é   é-   é.   é   é1   é4   é?   r   ÚYú-z--Ú02dú:Úx)ÚintÚSLINE_REÚmatchÚgroupÚstr)ÚslineÚencZstallZyldZwrtdbZreadbZwatdbZyld_strZ	wrtdb_strZ	readb_strZ	watdb_str© r   úB/var/www/auris/lib/python3.10/site-packages/triton/tools/disasm.pyÚ	parseCtrl#   s   "r   c                 C   sx   t  | ¡ d¡}| d¡r|d d… d }t|ƒ}t |¡d ur6tt |¡ d¡dƒ}||v r0nt|ƒ||< |› |› fS )Nr   z ;éþÿÿÿú;é   r   )ÚFLINE_REr   r   Úendswithr   ÚBRA_REr   Úlen)Úfliner   ÚlabelsÚasmÚctrlÚtargetr   r   r   ÚprocessSassLines2   s   
r'   c              	   C   sh   t  ¡ \}}z't|dƒ}| | ¡ W d   ƒ n1 sw   Y  t||ƒ}W t |¡ |S t |¡ w )NÚwb)ÚtempfileÚmkstempÚopenÚwriteÚextractÚosÚremove)Z	cubin_asmÚfunÚfdÚpathZcubinÚsassr   r   r   Úget_sassB   s   ÿ
ÿr4   c                  C   s   ddl m}  | dƒS )Nr   ©Ú_path_to_binaryÚ	cuobjdump)Ztriton.backends.nvidia.compilerr6   r5   r   r   r   Úpath_to_cuobjdumpN   s   r8   c                 C   sì  t ƒ \}}|d u rt |d| g¡}n
t |d|d| g¡}| ¡ }d}|t|ƒk rô||  ¡ }t |¡d u rO|d7 }|t|ƒk rF||  ¡ }nd S t |¡d u s5t |¡ d¡}d}	|	d|› d7 }	|d7 }||  ¡ }i }
g }t	 |¡d ur ||  ¡ }|d7 }||  ¡ }|d7 }| 
t|||
ƒ¡ ||  ¡ }t	 |¡d usvt|ƒD ]I\}\}}|d	 }||
v rÀd
|
| › }|	|› d7 }	|	|d 7 }	t |¡rçtt |¡ d¡d	ƒ}d
|
| › }t d|› d|¡}|	|d 7 }	q¤|	d7 }	|	S d S )Nz-sassz-funr   r   Ú z	Function:Ú
r   r   ZLBBz:
ú	z\1r   )r8   Ú
subprocessÚcheck_outputÚ
splitlinesr!   ÚdecodeÚFNAME_REr   r   r   Úappendr'   Ú	enumerater    r   Úsub)Ú	file_pathr0   r7   Ú_Zsass_strZ
sass_linesZline_idxÚlineÚfnameÚretr#   Z
asm_bufferr"   r   Úidxr%   r$   ÚoffsetZ
label_namer&   Útarget_namer   r   r   r-   T   sV   
û÷
Ìr-   )N)Ú	functoolsr.   Úrer<   r)   Úcompiler   r   r@   r    r   r'   Ú	lru_cacher4   r8   r-   r   r   r   r   Ú<module>   s    




