Compare commits
3 Commits
f6d731b520
...
7311dbcaaf
Author | SHA1 | Date |
---|---|---|
|
7311dbcaaf | |
|
28c51f7e62 | |
|
a09736cc75 |
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 入门
|
||||
title: 入门 - 基础
|
||||
permalink: /docs/zh/basis
|
||||
toc: true
|
||||
---
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 入门
|
||||
title: 入门 - 工作区
|
||||
permalink: /docs/zh/workspace
|
||||
toc: true
|
||||
---
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 入门
|
||||
title: 入门 - 文件基本操作
|
||||
permalink: /docs/zh/fileop-basis
|
||||
toc: true
|
||||
---
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 脚本开发
|
||||
title: 脚本开发 - 编辑器介绍
|
||||
permalink: /docs/zh/script-ide
|
||||
toc: true
|
||||
---
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 脚本开发
|
||||
title: 脚本开发 - 设置相关
|
||||
permalink: /docs/zh/script-setting
|
||||
toc: true
|
||||
---
|
||||
|
|
|
@ -1,8 +1,119 @@
|
|||
---
|
||||
title: 脚本开发
|
||||
title: 脚本开发 - AngelScript 简介
|
||||
permalink: /docs/zh/script-angelscript
|
||||
toc: true
|
||||
---
|
||||
|
||||
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
|
||||
{: .notice--warning .text-center}
|
||||
## 简介
|
||||
|
||||
AngelScript 是由 Andreas Jönsson(AngelCode)开发的开源、跨平台、高性能脚本语言,专为嵌入 C++ 应用(尤其是游戏引擎)而设计,语法类似 C/C++,但去除了指针和多继承等复杂特性,以静态强类型、面向对象为核心,支持自动内存管理和自定义类型注册,能够无缝调用主程序中的 C/C++ 函数与类。如果你对这个语言很感兴趣,可以到这个 [官网](https://www.angelcode.com/angelscript/) 去了解。
|
||||
|
||||
在选择哪种脚本语言时,我(寂静的羽夏)当时有很多很多选项:Python、lua、js、ChaiScript 甚至是 C# ,在最初 WingHexExplorer 都选择过 Python ,为什么最终选择了这门语言?有下面几个考虑:
|
||||
|
||||
- 更新很勤快:我不需要为了 Bug 擦屁股;
|
||||
- 轻量:我不需要奇奇怪怪的绑定才能舒服的使用;
|
||||
- 跨平台且容易集成编译:当然这个是这个语言的副产物,这个是必须的,这不是它在这几个脚本语言选择中的优势,不过容易集成算是个不小的优势;
|
||||
- 静态语言:实现一个功能稍微丰富代码编辑器,我只需要词法分析就基本完成代码填充工作,这就够了,代码风格我也很喜欢,当然作为对类型大小要求严格的十六进制这也是很需要的;
|
||||
- 文档和周边比较多:我可以实现调试功能、各种可以借鉴学习的库和实现,这是一个巨大的优势;
|
||||
|
||||
## 引出下文
|
||||
|
||||
看到语法类似 C/C++ ,请不要害怕,它十分简单它不支持 C/C++ 一些奇奇怪怪嵌套的声明方法或者书写方式。如果你了解编译原理,它的完整的语法结构可以用 BNF 描述如下:
|
||||
|
||||
```bnf
|
||||
SCRIPT ::= {IMPORT | ENUM | TYPEDEF | CLASS | MIXIN | INTERFACE | FUNCDEF | VIRTPROP | VAR | FUNC | NAMESPACE | ';'}
|
||||
NAMESPACE ::= 'namespace' IDENTIFIER {'::' IDENTIFIER} '{' SCRIPT '}'
|
||||
ENUM ::= {'shared' | 'external'} 'enum' IDENTIFIER (';' | ('{' IDENTIFIER ['=' EXPR] {',' IDENTIFIER ['=' EXPR]} '}'))
|
||||
CLASS ::= {'shared' | 'abstract' | 'final' | 'external'} 'class' IDENTIFIER (';' | ([':' IDENTIFIER {',' IDENTIFIER}] '{' {VIRTPROP | FUNC | VAR | FUNCDEF} '}'))
|
||||
TYPEDEF ::= 'typedef' PRIMTYPE IDENTIFIER ';'
|
||||
FUNC ::= {'shared' | 'external'} ['private' | 'protected'] [((TYPE ['&']) | '~')] IDENTIFIER PARAMLIST ['const'] FUNCATTR (';' | STATBLOCK)
|
||||
INTERFACE ::= {'external' | 'shared'} 'interface' IDENTIFIER (';' | ([':' IDENTIFIER {',' IDENTIFIER}] '{' {VIRTPROP | INTFMTHD} '}'))
|
||||
VAR ::= ['private'|'protected'] TYPE IDENTIFIER [( '=' (INITLIST | EXPR)) | ARGLIST] {',' IDENTIFIER [( '=' (INITLIST | EXPR)) | ARGLIST]} ';'
|
||||
IMPORT ::= 'import' TYPE ['&'] IDENTIFIER PARAMLIST FUNCATTR 'from' STRING ';'
|
||||
FUNCDEF ::= {'external' | 'shared'} 'funcdef' TYPE ['&'] IDENTIFIER PARAMLIST ';'
|
||||
VIRTPROP ::= ['private' | 'protected'] TYPE ['&'] IDENTIFIER '{' {('get' | 'set') ['const'] FUNCATTR (STATBLOCK | ';')} '}'
|
||||
MIXIN ::= 'mixin' CLASS
|
||||
INTFMTHD ::= TYPE ['&'] IDENTIFIER PARAMLIST ['const'] ';'
|
||||
STATBLOCK ::= '{' {VAR | STATEMENT} '}'
|
||||
PARAMLIST ::= '(' ['void' | (TYPE TYPEMOD [IDENTIFIER] ['=' EXPR] {',' TYPE TYPEMOD [IDENTIFIER] ['=' EXPR]})] ')'
|
||||
TYPEMOD ::= ['&' ['in' | 'out' | 'inout']]
|
||||
TYPE ::= ['const'] SCOPE DATATYPE ['<' TYPE {',' TYPE} '>'] { ('[' ']') | ('@' ['const']) }
|
||||
INITLIST ::= '{' [ASSIGN | INITLIST] {',' [ASSIGN | INITLIST]} '}'
|
||||
SCOPE ::= ['::'] {IDENTIFIER '::'} [IDENTIFIER ['<' TYPE {',' TYPE} '>'] '::']
|
||||
DATATYPE ::= (IDENTIFIER | PRIMTYPE | '?' | 'auto')
|
||||
PRIMTYPE ::= 'void' | 'int' | 'int8' | 'int16' | 'int32' | 'int64' | 'uint' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | 'float' | 'double' | 'bool'
|
||||
FUNCATTR ::= {'override' | 'final' | 'explicit' | 'property' | 'delete'}
|
||||
STATEMENT ::= (IF | FOR | WHILE | RETURN | STATBLOCK | BREAK | CONTINUE | DOWHILE | SWITCH | EXPRSTAT | TRY)
|
||||
SWITCH ::= 'switch' '(' ASSIGN ')' '{' {CASE} '}'
|
||||
BREAK ::= 'break' ';'
|
||||
FOR ::= 'for' '(' (VAR | EXPRSTAT) EXPRSTAT [ASSIGN {',' ASSIGN}] ')' STATEMENT
|
||||
WHILE ::= 'while' '(' ASSIGN ')' STATEMENT
|
||||
DOWHILE ::= 'do' STATEMENT 'while' '(' ASSIGN ')' ';'
|
||||
IF ::= 'if' '(' ASSIGN ')' STATEMENT ['else' STATEMENT]
|
||||
CONTINUE ::= 'continue' ';'
|
||||
EXPRSTAT ::= [ASSIGN] ';'
|
||||
TRY ::= 'try' STATBLOCK 'catch' STATBLOCK
|
||||
RETURN ::= 'return' [ASSIGN] ';'
|
||||
CASE ::= (('case' EXPR) | 'default') ':' {STATEMENT}
|
||||
EXPR ::= EXPRTERM {EXPROP EXPRTERM}
|
||||
EXPRTERM ::= ([TYPE '='] INITLIST) | ({EXPRPREOP} EXPRVALUE {EXPRPOSTOP})
|
||||
EXPRVALUE ::= 'void' | CONSTRUCTCALL | FUNCCALL | VARACCESS | CAST | LITERAL | '(' ASSIGN ')' | LAMBDA
|
||||
CONSTRUCTCALL ::= TYPE ARGLIST
|
||||
EXPRPREOP ::= '-' | '+' | '!' | '++' | '--' | '~' | '@'
|
||||
EXPRPOSTOP ::= ('.' (FUNCCALL | IDENTIFIER)) | ('[' [IDENTIFIER ':'] ASSIGN {',' [IDENTIFIER ':' ASSIGN} ']') | ARGLIST | '++' | '--'
|
||||
CAST ::= 'cast' '<' TYPE '>' '(' ASSIGN ')'
|
||||
LAMBDA ::= 'function' '(' [[TYPE TYPEMOD] [IDENTIFIER] {',' [TYPE TYPEMOD] [IDENTIFIER]}] ')' STATBLOCK
|
||||
LITERAL ::= NUMBER | STRING | BITS | 'true' | 'false' | 'null'
|
||||
FUNCCALL ::= SCOPE IDENTIFIER ARGLIST
|
||||
VARACCESS ::= SCOPE IDENTIFIER
|
||||
ARGLIST ::= '(' [IDENTIFIER ':'] ASSIGN {',' [IDENTIFIER ':'] ASSIGN} ')'
|
||||
ASSIGN ::= CONDITION [ ASSIGNOP ASSIGN ]
|
||||
CONDITION ::= EXPR ['?' ASSIGN ':' ASSIGN]
|
||||
EXPROP ::= MATHOP | COMPOP | LOGICOP | BITOP
|
||||
BITOP ::= '&' | '|' | '^' | '<<' | '>>' | '>>>'
|
||||
MATHOP ::= '+' | '-' | '*' | '/' | '%' | '**'
|
||||
COMPOP ::= '==' | '!=' | '<' | '<=' | '>' | '>=' | 'is' | '!is'
|
||||
LOGICOP ::= '&&' | '||' | '^^' | 'and' | 'or' | 'xor'
|
||||
ASSIGNOP ::= '=' | '+=' | '-=' | '*=' | '/=' | '|=' | '&=' | '^=' | '%=' | '**=' | '<<=' | '>>=' | '>>>='
|
||||
IDENTIFIER ::= single token: starts with letter or _, can include any letter and digit, same as in C++
|
||||
NUMBER ::= single token: includes integers and real numbers, same as C++
|
||||
STRING ::= single token: single quoted ', double quoted ", or heredoc multi-line string """
|
||||
BITS ::= single token: binary 0b or 0B, octal 0o or 0O, decimal 0d or 0D, hexadecimal 0x or 0X
|
||||
COMMENT ::= single token: starts with // and ends with new line or starts with /* and ends with */
|
||||
WHITESPACE ::= single token: spaces, tab, carriage return, line feed, and UTF8 byte-order-mark
|
||||
```
|
||||
|
||||
猛地一看确实挺长的,但是,在研究词法分析的时候,你就会知道这门语言设计的是多简单。请不要害怕,我会把 AngelScript 几乎所有的用法进行介绍,并且教你如何使用它来实现一个自动化分析程序中打开的二进制文件。
|
||||
|
||||
你可以把这个教程作为你使用 AngelScript 去开发其他软件的脚本,但是请注意。该软件使用的是 AngelScript 的子集,另外有自己的独特的 API 以及脚本代码预处理器。有些仅供参考,其他的脚本引擎环境未必拥有该软件实现的特性。
|
||||
{: .notice--warning}
|
||||
|
||||
## 引擎配置说明
|
||||
|
||||
在`ScriptMachine`中,以下代码是对引擎进行配置处理,它影响了引擎的行为:
|
||||
|
||||
```cpp
|
||||
_engine->SetEngineProperty(asEP_EXPAND_DEF_ARRAY_TO_TMPL, true);
|
||||
_engine->SetEngineProperty(asEP_DISALLOW_EMPTY_LIST_ELEMENTS, true);
|
||||
_engine->SetEngineProperty(asEP_DISALLOW_VALUE_ASSIGN_FOR_REF_TYPE, false);
|
||||
_engine->SetEngineProperty(asEP_ALLOW_MULTILINE_STRINGS, false);
|
||||
_engine->SetEngineProperty(asEP_USE_CHARACTER_LITERALS, false);
|
||||
_engine->SetEngineProperty(asEP_DISABLE_INTEGER_DIVISION, false);
|
||||
_engine->SetEngineProperty(asEP_PRIVATE_PROP_AS_PROTECTED, false);
|
||||
_engine->SetEngineProperty(asEP_ALTER_SYNTAX_NAMED_ARGS, 0);
|
||||
_engine->SetEngineProperty(asEP_ALLOW_UNICODE_IDENTIFIERS, true);
|
||||
_engine->SetEngineProperty(asEP_REQUIRE_ENUM_SCOPE, true);
|
||||
```
|
||||
|
||||
这些配置可以总结如下:
|
||||
|
||||
1. 数组你可以声明为`T[]`,而必须`array<T>`。该引擎默认不支持数组,需要注册额外的插件才能够使用。本软件已经注册并且支持`T[]`来更方便的进行声明。
|
||||
2. 在初始化中不能有空对象,比如:`array<int> arr = {1,2,,4,5,};`这个就是非法的,因为这里面有的元素是空的。
|
||||
3. 除法和字符串行为和 C/C++ 的一致(注:该脚本支持 heredoc 字符串)。
|
||||
4. 枚举和 C++ 的枚举类行为一致。
|
||||
5. 脚本代码和变量名、标识符支持中文。
|
||||
|
||||
有关其他的不同比如注册的插件或者注意事项将会在后续教程中来进行说明。
|
||||
|
||||
## 代码预处理器
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 脚本开发
|
||||
title: 脚本开发 - 基本语法
|
||||
permalink: /docs/zh/script-grammar
|
||||
toc: true
|
||||
---
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
---
|
||||
title: WingHexExplorer2 v2.2.2 正式版发布
|
||||
---
|
||||
|
||||
一个自由的强大免费的十六进制编辑器,基于 QT C++ 进行开发,作者是寂静的羽夏。
|
||||
|
||||
如有 Bug, 欢迎反馈到 [Github](https://github.com/Wing-summer/WingHexExplorer2/issues) 上,如果你访问这有困难的话,也可以反馈到 [Gitee](https://gitee.com/wing-cloud/WingHexExplorer2/issues) 上。如果实在不行,可以通过我的 [博客园](https://www.cnblogs.com/wingsummer) 上公告栏的任意一种联系方式来告诉我。不过我还是希望你反馈到 Github 上方便我写递交注释的。
|
||||
|
||||
开源不易,也欢迎赞助或者参与代码和文档贡献,我默认会将您放入鸣谢标签的内容进行鸣谢。
|
||||
|
||||
许可证:GNU 通用公共许可证 第 3 版
|
||||
|
||||
---
|
||||
|
||||
{: .align-center}
|
||||
|
||||
---
|
||||
|
||||
## 最新发布日志
|
||||
|
||||
  该仓库仅提供基于 QT6 的十六进制编辑器安装包,对于 Windows 采用 InnoSetup 安装包。对于 Linux 采用 run 自解压安装文件进行安装,请在终端使用命令行使用 root 权限进行,若要卸载请到`/opt/WingHexExlorer2`下进入终端使用 root 权限执行`uninstall.sh`完成卸载。 **在 Linux 上,如果你有对应的编译环境,我不推荐使用 run 安装文件方式。** 因为为了保证安装包的通用性,我在里面部署了大量的库,包括对应的 glic 和 ld-linux和对可执行文件做了`patch`,让文件总体积膨胀,这是一个很不划算的事情。建议使用`mkinstaller`下的`pyscript`进行安装。
|
||||
|
||||
  **本软件不会以任何理由主动向你收取费用,你通过下载渠道给的费用一分钱也不会到我这里,请注意。**
|
||||
|
||||
  如有 Bug ,请到`Github`或者`Gitee`提交`issue`。如果有功能建议,也可以通过`issue`,不过我更建议 **到 Github 的 discussion 区提交** 。
|
||||
|
||||
  该工具的定位是对二进制的编辑和分析。**欢迎热心的大佬一起共建基础开源工具**。
|
||||
|
||||
  目前只有我一个人开发,我不可能能够把每个功能做好测试,尤其是做 **高风险** 的操作,点名在 root 权限下操作文件。
|
||||
|
||||
  我可能不会对每个 Bug 能够积极响应,不过对大家的建议和需求我会尽可能地尽早回复和评估处理。
|
||||
|
||||
  其实`v2.0.0`我原本打算让内置脚本编辑器使用体验很顺滑,主要是代码`auto-complete`提示很好用,但由于我精力有限,我只提供了内置公共方法提供了填充支持,对于局部变量类型的支持,我没有做。这个是最麻烦的一件事,首先我得很清楚`AngelScript`的编译流程。现在我只是懂得了大概,对于类型推断这个还是挺复杂的。更不幸的是,`AngelScript`的语法树生成、变量类型推断和字节码生成被融合在一块,导致我首先为了效率第一步做的就是只保留语法树生成和变量推断的部分。而它生成的信息不足以我去做`auto-complete`,我还需要添加一些跟源码绑定的信息才能够正常实现。**我甚至为了这件事买了本《编译原理》去研究,但目前项目的热度不足以支持我用爱继续发电把我之前都没做过的这个事情继续做下去。** 当然,如果`Github`上星过`800`,`Gitee`星过`1000`倒是可以考虑考虑,不过不要刷,星星数目多了也不给我带来什么物质上的东西,:)。
|
||||
|
||||
## 插件版本兼容性
|
||||
|
||||
  软件版本分为三个部分,对插件重点关注中间的数字,也就是次版本号。当数字发生变化时,那说明插件的 API 发生改变,已经不兼容。对于我想要单文件实现插件开发,我目前没有很好的办法做兼容处理,那就先这样。
|
||||
|
||||
## 更新内容
|
||||
|
||||
  以下是相对于上一个版本的增强和修复日志:
|
||||
|
||||
- AngelScript 高亮规则修复和调整
|
||||
- 脚本编译更细致的报错和提示行号列号
|
||||
- 更好的词法分析器
|
||||
- 更好的基于纯词法分析代码填充提示新增:全局变量、非 auto 推断变量类型成员、宏的提示、类名、函数内局部变量
|
||||
- 脚本相关新增:支持执行时间限制、支持 #define / #if / #ifudef / #else / #endif / #undef 宏支持
|
||||
- 将脚本运行限制在主线程进行
|
||||
- 脚本控制台目前功能得到了增强,增加全局变量功能和相关管理宏:#ls / #del / #cls
|
||||
- 修复 WingCStruct 的嵌套结构体读取为字典时成员丢失的问题
|
||||
- 修复查找功能通配符搜索功能损坏的问题
|
||||
- 新增十六进制编辑的主动重载功能,以解决大文件读取文件时的一些异常需重载继续
|
||||
- 修复禁用脚本可能发生的崩溃问题
|
||||
- 移除数据可视化功能和相关 API
|
||||
- 优化 WingAngelAPI 脚本注册代码
|
||||
- 脚本引擎单例化,减少不必要的传参
|
||||
- 数值显示增加无符号切换格式
|
||||
- 修复克隆页右键菜单功能无效
|
||||
- 修复终端主题修改输出颜色不随之改变的问题
|
||||
- 优化文本预览功能体验
|
||||
- 新增一些右键菜单选项,优化用户体验
|
||||
- 更新上游依赖库
|
||||
|
||||
## 后面更新
|
||||
|
||||
  我将会根据知名度我会酌情偏向更新文档内容。
|
||||
|
||||
  之后暂停更新新功能,如果发现有 Bug 月更,恶性 Bug 周更,如果赞助比较多我就提高点更新频率。
|
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
title: WingHexExplorer2 v2.2.3 正式版发布
|
||||
---
|
||||
|
||||
一个自由的强大免费的十六进制编辑器,基于 QT C++ 进行开发,作者是寂静的羽夏。
|
||||
|
||||
如有 Bug, 欢迎反馈到 [Github](https://github.com/Wing-summer/WingHexExplorer2/issues) 上,如果你访问这有困难的话,也可以反馈到 [Gitee](https://gitee.com/wing-cloud/WingHexExplorer2/issues) 上。如果实在不行,可以通过我的 [博客园](https://www.cnblogs.com/wingsummer) 上公告栏的任意一种联系方式来告诉我。不过我还是希望你反馈到 Github 上方便我写递交注释的。
|
||||
|
||||
开源不易,也欢迎赞助或者参与代码和文档贡献,我默认会将您放入鸣谢标签的内容进行鸣谢。
|
||||
|
||||
许可证:GNU 通用公共许可证 第 3 版
|
||||
|
||||
---
|
||||
|
||||
{: .align-center}
|
||||
|
||||
---
|
||||
|
||||
## 最新发布日志
|
||||
|
||||
  该仓库仅提供基于 QT6 的十六进制编辑器安装包,对于 Windows 采用 InnoSetup 安装包。对于 Linux 采用 run 自解压安装文件进行安装,请在终端使用命令行使用 root 权限进行,若要卸载请到`/opt/WingHexExlorer2`下进入终端使用 root 权限执行`uninstall.sh`完成卸载。 **在 Linux 上,如果你有对应的编译环境,我不推荐使用 run 安装文件方式。** 因为为了保证安装包的通用性,我在里面部署了大量的库,包括对应的 glic 和 ld-linux和对可执行文件做了`patch`,让文件总体积膨胀,这是一个很不划算的事情。建议使用`mkinstaller`下的`pyscript`进行安装。
|
||||
|
||||
  **本软件不会以任何理由主动向你收取费用,你通过下载渠道给的费用一分钱也不会到我这里,请注意。**
|
||||
|
||||
  如有 Bug ,请到`Github`或者`Gitee`提交`issue`。如果有功能建议,也可以通过`issue`,不过我更建议 **到 Github 的 discussion 区提交** 。
|
||||
|
||||
  该工具的定位是对二进制的编辑和分析。**欢迎热心的大佬一起共建基础开源工具**。
|
||||
|
||||
  目前只有我一个人开发,我不可能能够把每个功能做好测试,尤其是做 **高风险** 的操作,点名在 root 权限下操作文件。
|
||||
|
||||
  我可能不会对每个 Bug 能够积极响应,不过对大家的建议和需求我会尽可能地尽早回复和评估处理。
|
||||
|
||||
  其实`v2.0.0`我原本打算让内置脚本编辑器使用体验很顺滑,主要是代码`auto-complete`提示很好用,但由于我精力有限,我只提供了内置公共方法提供了填充支持,对于局部变量类型的支持,我没有做。这个是最麻烦的一件事,首先我得很清楚`AngelScript`的编译流程。现在我只是懂得了大概,对于类型推断这个还是挺复杂的。更不幸的是,`AngelScript`的语法树生成、变量类型推断和字节码生成被融合在一块,导致我首先为了效率第一步做的就是只保留语法树生成和变量推断的部分。而它生成的信息不足以我去做`auto-complete`,我还需要添加一些跟源码绑定的信息才能够正常实现。**我甚至为了这件事买了本《编译原理》去研究,但目前项目的热度不足以支持我用爱继续发电把我之前都没做过的这个事情继续做下去。** 当然,如果`Github`上星过`800`,`Gitee`星过`1000`倒是可以考虑考虑,不过不要刷,星星数目多了也不给我带来什么物质上的东西,:)。
|
||||
|
||||
## 插件版本兼容性
|
||||
|
||||
  软件版本分为三个部分,对插件重点关注中间的数字,也就是次版本号。当数字发生变化时,那说明插件的 API 发生改变,已经不兼容。对于我想要单文件实现插件开发,我目前没有很好的办法做兼容处理,那就先这样。
|
||||
|
||||
## 更新内容
|
||||
|
||||
  以下是相对于上一个版本的增强和修复日志:
|
||||
|
||||
- print 多参数支持,新增 println
|
||||
- 新增 promise 异步支持
|
||||
- 增强内置宏,增加了大量的与环境相关的宏,可以用预处理器进行判断
|
||||
- 增强了代码预处理器,几乎和 C++ 一样但不支持 #elif 和 #define 宏函数
|
||||
- 弥补缺失的字符串相关的函数
|
||||
- 移除搜索指定选区废弃的功能
|
||||
- 优化代码编辑器的体验和代码填充体验
|
||||
- 修复程序中快捷键冲突导致无效的问题
|
||||
- 修复设置中的重置和恢复默认值无效的问题
|
||||
- 修复十六进制编辑器缩放过小无法恢复的问题,与此同时对缩放倍率做了限制
|
||||
- 书签可视化更加明显:由字体加粗变为周围有虚线框
|
||||
|
||||
## 后面更新
|
||||
|
||||
  我将会根据知名度我会酌情偏向更新文档内容(目前没啥知名度和赞助,暂停)。
|
||||
|
||||
  随缘更新,下一步计划尝试使用 antlr4 作为代码填充引擎替换掉我自己写的简单的字符串匹配,看我心情和时间。如果发现有 Bug 月更,恶性 Bug 周更,如果赞助比较多我就提高点更新频率。
|
Binary file not shown.
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Binary file not shown.
After Width: | Height: | Size: 1.5 MiB |
4
index.md
4
index.md
|
@ -46,8 +46,8 @@ header:
|
|||
- 友好的标注可视化
|
||||
- **多选区支持** (按住 <kbd>Shift</kbd> 会增加选区, <kbd>Alt</kbd> 会裁剪选区。在含有多个选区的情况下,不按住任何键拖放的选区会在鼠标释放按键之后消失。按住 <kbd>Ctrl</kbd> 选区会取消原有的选择的内容,同时按住 <kbd>Shift</kbd> 和 <kbd>Alt</kbd> 视为 <kbd>Ctrl</kbd> 的操作)
|
||||
- **强大的脚本系统** ,用于批量分析二进制数据(AngelScript)
|
||||
- **强大的插件系统** ,只须头文件就可以开发插件,实现对软件的较高自由度定制和增强,并提供组件注册和基础的脚本系统函数绑定
|
||||
- **内置脚本编辑器** ,提供基础的代码填充和调试功能,并且支持 **ClangFormat** 对代码进行格式化
|
||||
- **强大的插件系统** ,实现对软件的较高自由度定制和增强,并提供组件注册和基础的脚本系统函数绑定
|
||||
- **内置脚本编辑器** ,提供代码填充和调试功能,并且支持 **ClangFormat** 对代码进行格式化
|
||||
- 内置暗黑和浅色主题
|
||||
|
||||
## 发行版下载
|
||||
|
|
Loading…
Reference in New Issue