This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
内容贡献者: 寂静的羽夏
简介
WingHexPy
是一个强大的羽云十六进制编辑器插件,它具有对 Python3 脚本的支持,拥有即时交互控制台,使用脚本分析二进制有了可能。本插件支持所有的原生IWingPlugin
的所有接口,于此同时也拥有自己独特的接口以供与插件进行交互。
WingHexPy
协议
本插件遵守AGPL-3.0
,不得用于该协议之外的用途。
使用环境
本插件首先要正确安装WingHexExplorer
这个软件。如果通过安装我的发行的包,就不需要继续操作。本插件依赖python3
这个包,如果没有安装,你需要在终端输入以下命令进行安装:
sudo apt install python3
开发框架
QT 5.15.3 、 DTK 和 python3
如何编译
首先你需要安装 DTK ,具体可以参考WingHexExplorer
的WIKI
。然后我们需要安装python3
的开发包,需要输入以下命令进行安装:
sudo apt install python3-dev
然后我们就可以正常编译该软件了。
功能介绍
本插件给脚本支持除插件信息相关的所有原生插件接口,也就是说,除了插件信息相关的API
没有提供,其它的均提供了对应的python
接口。还提供了一些组件用不同的方式来显示脚本的分析结果:列表、树组件、表格和普通文本,这些都有对应的控制接口。
API 接口
与插件接口开发的相关知识请到该页面进行学习 插件开发教程 。下面我来介绍对应关系:
我们要使用WingPlugin::Reader
和WingPlugin::Controller
类的时候我们使用的对应的变量reader
和controller
,同样,在Python
脚本也是使用这两个变量,可以直接使用,该包已经内置。
但是,脚本也是得遵守插件系统的抢占机制
的,如果要使用controller
这个变量同样调用requestControl
这个函数,不需要的时候需要调用requestRelease
释放。不过requestRelease
这个函数在脚本可以不用调用,脚本执行完毕后会自动调用该函数来进行释放。
与插件抢占机制和拓展接口均可以通过service
变量进行使用,如下是其相关 API :
requestControl
:申请控制权限。requestRelease
:申请释放控制权限。print
:在控制台打印无格式字符串。errPrint
:在控制台打印代表错误的红色字符串。infoPrint
:在控制台打印代表信息的绿色字符串。warnPrint
:在控制台打印代表警告的黄色字符串。
最后再介绍如何用插件提供的组件来控制组件显示结果,是通过操作内置变量来实现,它们都是原生Qt
对象,PythonQt
可以进行完全控制。
- 如果要控制列表,它对应的标签页名字是
信息列表
,内置变量是infolist
,它是QListWidget
指针。 - 如果要控制树组件,它对应的标签页名字是
树信息列表
,内置变量是infotree
,它是QTreeWidget
指针。 - 如果要控制表格组件,它对应的标签页名字是
信息表格
,内置变量是infotable
,它是QTableWidget
指针。 - 如果要控制普通文本显示组件,它对应的标签页名字是
信息表格
,内置变量是infotxt
,它是QTextBrowser
指针。
控制台
控制台和Python
自带的Shell
是一样的,不过它有智能填充的功能,只需要输入几个字符,然后按键盘上的Ctrl + 空格
即可显示(截屏截不到示意图)。
脚本编辑器
该插件业提供了脚本编辑器,它具有语法高亮和智能填充的功能。
风格图标样式和羽云十六进制编辑器完全一致,深度文本编辑器和羽云十六进制编辑器怎么用,这个就怎么用。下面仅介绍运行脚本的功能。
- ①:执行该编辑器的输入的脚本,输出会在控制台。
- ②:从文件外部执行脚本,输出会在控制台。
脚本中心
效仿 010 Editor 的模版脚本仓库,本插件业提供了脚本中心。也就是说,在该插件里,通过脚本,你可以实现 010 Editor 的模版和脚本的功能。
编写完脚本,需要编写一个注册文件并用文件夹封装一个包,才可以被该插件识别,下面我们来介绍如何注册以及相关细节。
注册文件
注册文件是一个json
文件,只要保证脚本名称和该文件的文件名保持一致且都是合法正确的即可正常使用。但是,该插件注册脚本信息时不会检查对应的脚本是否真正存在,这会导致无法找到脚本的执行错误。比如如果注册hello.py
,就必须有对应的hello.json
文件,里面所有的成员都是可选的。
{
"author": "wingsummer",
"license": "GPL",
"commnet": "A useful script!",
"version": 1
}
下面我们来介绍相关成员:
- author :作者名称,默认为空。
- license :脚本遵守协议,默认
Unlicense
。 - commnet :脚本说明,默认为空。
- version :脚本版本号,默认为
0
。
脚本和注册文件都准备好了,我们如何注册呢?
我们需要在脚本文件夹下,即软件安装目录下的plugin
下新建一个WingHexPyScript
文件夹,如果有保留。如果没有类别,我们还需要新建一个文件夹,文件夹的名称就是该脚本的类别。然后我们把这两个文件拷贝到里面,之后下次启动程序,插件被加载成功就会检测并注册。
举个例子,比如我想注册hello.py
,也写好hello.json
文件。发现软件安装目录下的plugin
没有WingHexPyScript
文件夹,于是我新建了它;我想把我的脚本放到World
类别,我继续在WingHexPyScript
文件夹下新建名字为World
的文件夹。由于脚本是通过所谓的包,也就是文件夹管理,继续新建一个hello
文件夹,最后把文件放到里面。这样注册流程就结束了。注:每个脚本注册时必须有对应的包和类别,否则不予识别注册!
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。