U
    h                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZmZ edZ	edZ
edZedZdd	 Zd
d Ze  dddZdd ZdS )    N   )path_to_cuobjdumppath_to_nvdisasmz1\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rndnt|}|dkrdnt|}	|dkrd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   E/var/www/html/venv/lib/python3.8/site-packages/triton/tools/disasm.py	parseCtrl%   s    r   c                 C   sx   t | d}|dr*|d d d }t|}t|d k	rltt|dd}||kr`nt|||< | | fS )Nr   z ;;r   r   )FLINE_REr   r   endswithr   BRA_REr   len)fliner   labelsasmctrltargetr   r   r   processSassLines4   s    
r)   c              	   C   sL   t  \}}z.t|d}||  W 5 Q R X t||}W 5 t| X |S )Nwb)tempfilemkstemposremoveopenwriteextract)Z	cubin_asmfunfdpathZcubinsassr   r   r   get_sassD   s    r6   c                 C   s  t  \}}t \}}|tjd< |d kr8t|d| g}nt|d|d| g}| }d}|t|k r||  }t	
|d kr|d7 }|t|k r||  }qrd S qrt	
|d}	d}
|
d|	 d7 }
|d	7 }||  }i }g }t
|d k	r@||  }|d7 }||  }|d7 }|t||| ||  }qt|D ]\}\}}|d
 }||krd||  }|
| d7 }
|
|d 7 }
t
|rtt
|d	d
}d||  }td| d|}|
|d 7 }
qH|
d7 }
|
S d S )NZNVDISASM_PATHz-sassz-funr   r    z	Function:
r   r   ZLBBz:
	z\1r   )r   r   r-   environ
subprocesscheck_output
splitlinesr#   decodeFNAME_REr   r   r    appendr)   	enumerater"   r   sub)	file_pathr2   Z	cuobjdump_ZnvdisasmZsass_strZ
sass_linesZline_idxlinefnameretr%   Z
asm_bufferr$   r   idxr'   r&   offsetZ
label_namer(   Ztarget_namer   r   r   r1   P   sT    



r1   )N)	functoolsr-   rer;   r+   Zcommon.backendr   r   compiler    r   r?   r"   r   r)   	lru_cacher6   r1   r   r   r   r   <module>   s   



