开发VScode 中的X64dbg 脚本语法高亮插件

1.目标

实现x64dbg脚本语法高亮

实现x64dbg脚本命令提示功能

工程文件

链接:https://pan.baidu.com/s/18VoiN-bBVZsl6tMdeecxQw 
提取码:dman

2.开发原理

编译原理中的词法分析,语法分析,语法制导翻译

3.使用工具

Git         git版本控制工具   

Node.js    nmp包下载配置工具


 Visual Studio Code - Code Editing. Redefined  vscode编辑器

IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com)   使用java代码爬取官网数据

使用npm下载以下三个工具

npm install -g yo generator-code            用于vs插件开发  

npm install -g yo                                     用于vs环境配置

npm install vsce                                  用于打包发布       

4.环境配置

在cmd命令行中输入yo code

选择New Language Support

在URL or file to import, or none for new:按空格(不导入外部语法文件)

其他输入内容都输入dbg即可

5.分析实现完成高亮和提示插件需要修改vscode插件文件中的内容

snippets 文件夹(如果不存在则自己创建该文件夹),配置dbg.code-snippets 用于实现代码提示功能

{
    "inc": {
                "prefix": ["inc"],
                "body": [
                "inc arg1",
                "arg1 Destination."
            ],
                "description": "功能:Increase a value."
            },
    "dec": {
                "prefix": ["dec"],
                "body": [
                "dec arg1",
                "arg1 Destination."
            ],
                "description": "功能:Decrease a value."
            }
}
关键字解释
"dec":表示描述信息
"prefix":表示搜索的索引,如果输入de 则会自动提示dec
"body":表示提示内容
重点是设置"prefix"参数用于所以X64dbg所有的关键字
//"prefix" 实现方式为NFA转DFA求闭包过程算法

syntaxes 文件夹下的dbg.tmLanguage.json  语法高亮配置文件.用于高亮提示

{
	"$schema": "http://json-schema.org/draft-04/schema",
	"name": "dbg",
	"patterns": [
		{
			"include": "#comment"
		},
		{
			"include": "#labels"
		}
	],
	"repository": {
		"comment": {
			"patterns": [
				{
					"match": "(//).*$\\n?",
					"name": "comment.line.double-slash.js",
					"captures": {
						"1": {
							"name": "punctuation.definition.comment.json"
						}
					}
				}
			]
		},
        "labels": {
            "patterns": [
				{
					"name": "support.class.dbg",
			        "match": "[a-zA-Z][a-zA-Z]*:"
				}
			]
			
		}
	},
	"scopeName": "dbg"
}
关键字描述
patterns  :描述匹配规则(作为规则入口)
repository :子规则入口
"include": "#comment"  表示包含子规则comment
"match"  :表示正则表达式匹配内容
"name": "comment.line.double-slash.js", 用于标记对应的颜色

上述文件转化成对应的文法是
入口 -> comment | labels
comment ->"(//).*$\\n?"
labels -> "[a-zA-Z][a-zA-Z]*:"

功能可以高亮注释和标签

language-configuration.json  配置文件用于描述用于缩进,括号匹配以及收缩等

入口文件package.json   用于配置程序入口,以及语法文件的关联关系

"contributes": {
    "languages": [{
      "id": "abc",
      "aliases": ["abc", "abc"],
      "extensions": [".txt"],
      "configuration": "./language-configuration.json"
    }],
    "grammars": [{
      "language": "abc",
      "scopeName": "source.abc",
      "path": "./syntaxes/abc.tmLanguage.json"
    }],
    "snippets": [
      {
        "language": "abc", 
        "path": "snippets/abc.code-snippets"
      }
    ]
}

分析X64dbg语言,实现语法高亮json文件  具体参照给定的工程文件

参考官方文档

Debug Control — x64dbg documentation

分析词法

包含各种类型的关键字

命令控制关键字: InitDebug/initdbg/init 等

寄存器,标记,等特定命令关键字 CBX


 数字: 10进制  .123   16进制7B

变量: $myvar

字符串 格式化特殊类型" 字符 =  {ascii[;length]@address}"

表达式,功能表达式等,:(1+2) 

分析语法

入口-> 命令关键字 | 参数

命令关键字 -> 参数 参数....

参数 -> 标记 |变量 |表达式   等

爬取X64dbg 官方文档特定数据构建代码提示功能

1.使用工具idea  ,实现代码java ,使用包jsoup,用于解析和爬取X64dbg内容数据

分析爬取的数据

 分析网页中的内容:

需要提取出对应的命令例如SetBPX  以及对应参数arg  ,以及对应参数的描述,并将对应数据翻译成

特定结构.如下图所示

 实现需要解决3个问题

1.如何判定网页中获取的数据是需要,比如说需要的是参数的描述,则判定方式是什么

2.页面和页面的跳转方式是什么?比如SetBpx 怎么跳转到DeleteBPX?

3.怎么将获取的网页内容翻译成json格式?

按F12打开网页源代码

发现toctree-12 current 能获得对应数据,理由是在这个页面中具有唯一性 

 

 更具href中链接进行跳转

翻译:

命令翻译成标记和prefix

参数翻译成body

命令功能翻译成描述

具体爬取代码参考工程文件

运行对应工程

打开对应工程使用npm安装对应工程的包,并将包进行编译,运行vscode然后按F5即可运行

 install                                
npm run compile
code

调试工程

参考文档

官方插件参考网站
https://code.visualstudio.com/api/get-started/your-first-extension

代码片段参考网站 abc.code-snippets        用于代码生成
https://code.visualstudio.com/docs/editor/userdefinedsnippets


TextMate语言参考网站     abc.tmLanguage.json        用于语法高亮
https://macromates.com/manual/en/language_grammars

.

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值