欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用JavaScript逻辑来实现汇编代码高亮的简易方法

最编程 2024-08-13 15:49:01
...

效果:

汇编代码高亮

lea         rax,[b]  
lea         rcx,[a]  
mov         rdi,rax  
mov         rsi,rcx  
mov         ecx,80h  
rep movs    byte ptr [rdi],byte ptr [rsi]  
mov         eax,0Ah  
imul        rax,rax,0  
lea         rax,[rbp+rax+0C8h]  
mov         rdx,rax  
lea         rcx,[string "b.strs[0]=%s\n" (07FF74AF79D38h)]  
call        printf (07FF74AF711D1h)  
lea         rax,[rbp+210h]  
lea         rcx,[b]  
mov         rdi,rax  
mov         rsi,rcx  
mov         ecx,80h  
rep movs    byte ptr [rdi],byte ptr [rsi]  
lea         rdx,[rbp+210h]  
lea         rcx,[string "hello  world.  b = %d" (07FF74AF79D48h)]  
call        printf (07FF74AF711D1h)
 
实现代码:
<!DOCTYPE html>
<html>
<body>

<h2>汇编代码高亮</h2>

<p id="demo"></p>

<script>
function highlightAssemblyCode(assemblyCode) {
	// 匹配字符串
    var highlighted = assemblyCode.replace(/(".*?"|\'.*?\')/g, '<span style="color: #7f007f;">$1</span>');

    // 匹配指令
    var highlighted = highlighted.replace(/(lea|mov|rep movs|imul|call)/g, '<span style="color: #00007f; font-weight: bold;">$1</span>');

    // 匹配寄存器
    highlighted = highlighted.replace(/(rax|rcx|rdi|rsi|rdx|rbp|eax|ecx)/g, '<span style="color: #46aa03; font-weight: bold;">$1</span>');

    // 匹配十六进制数
    highlighted = highlighted.replace(/(0x[a-fA-F0-9]+|\b[0-9A-Fa-f]+h\b)/g, '<span style="color: #ff0000;">$1</span>');    

    // 匹配方括号和括号
    // highlighted = highlighted.replace(/(\[|\]|\(|\))/g, '<span style="color: #009900; font-weight: bold;">$1</span>');
	
    // 匹配byte ptr
    highlighted = highlighted.replace(/(byte ptr)/g, '<span style="color: #0000ff; font-weight: bold;">$1</span>');
	
	// 添加换行
    highlighted = highlighted.replace(/\n/g, '<br>\n');
	
    return highlighted;
}

var assemblyCode = `lea         rax,[b]  
lea         rcx,[a]  
mov         rdi,rax  
mov         rsi,rcx  
mov         ecx,80h  
rep movs    byte ptr [rdi],byte ptr [rsi]  
mov         eax,0Ah  
imul        rax,rax,0  
lea         rax,[rbp+rax+0C8h]  
mov         rdx,rax  
lea         rcx,[string "b.strs[0]=%s" (07FF74AF79D38h)]  
call        printf (07FF74AF711D1h)  
lea         rax,[rbp+210h]  
lea         rcx,[b]  
mov         rdi,rax  
mov         rsi,rcx  
mov         ecx,80h  
rep movs    byte ptr [rdi],byte ptr [rsi]  
lea         rdx,[rbp+210h]  
lea         rcx,[string "hello  world.  b = %d" (07FF74AF79D48h)]  
call        printf (07FF74AF711D1h)`;

document.getElementById("demo").innerHTML = highlightAssemblyCode(assemblyCode);
</script>

</body>
</html>

参考:

https://highlight.hohli.com/index.php



推荐阅读