2 个版本
0.7.7 | 2024 年 7 月 1 日 |
---|---|
0.7.6 | 2024 年 6 月 28 日 |
#2189 in 命令行工具
5KB
107 行
Hexo | 10110
小巧的二进制写入工具,正好满足您的需求
安装
cargo install hexo
命令行界面
使用 hexo -h
获取完整的 CLI 帮助手册。
参数
-
log-level
: 设置日志级别,可能的值:debug
、info
、warn
、error
、none
。默认:info
。 -
safe
: 启用安全模式,将禁用不安全函数,如cmd
和eval
。默认:false
命令
build
接受以 hexo 格式的源文件,并将其编译为二进制文件 output
hexo build --source <path to source> --output <path to output>
watch
接受以 hexo 格式的源文件,并将其编译为二进制文件 output
。在源文件更改时将重新编译
hexo watch --source <path to source> --output <path to output>
语法
发射器
要发射一个字节,请使用符号 >
后跟字节值
> 0a // by default numbers are interpreted as hexadecimal, will emit decimal 10
> 'HelloWorld' // will emit utf-8 bytes of 'HelloWorld' string
> 10x22 // you can specifiy arbitrary radix in range 2..36, will emit decimal 22
常量
要声明一个常量,请使用符号 $
后跟常量名称和值
$ class_name 'HelloWorld'
然后您可以使用它,就像使用 hex 或二进制字符串一样,通过在前面加上 $
> $class_name
声明函数
您可以使用符号 #
声明任意函数,后跟函数名称和主体
# class_declaration {
> 0100
> #len($0)
> $0
}
函数参数通过它们的索引进行引用: $0
、$1
、$2
、...
调用函数
要调用一个函数,请使用符号 #
后跟函数名称和参数
// String functions
> #len('HelloWorld') // will emit length of 'HelloWorld' in bytes (0a)
// OS functions
> #cmd(`ls`) // will emit result of command line 'ls' command
> #read_file('file.txt') // will emit content of 'file.txt'
// Padding functions
> #pad_left(AA, 4) // will emit '00 00 00 AA'
> #pad_right(AA, 4) // will emit 'AA 00 00 00'
> #pad('AA', left: 10x4, right: 10x8) // wil pad left by 4 bytes and right by 8 bytes
// Hexo compiler
> #eval('> 01 02 03') // will evaluate passed argument and return resulting compilation
示例
让我们编写 'HelloWorld' Java 类的字节码
$ class_name 'HelloWorld'
$ object_superclass_name 'java/lang/Object'
# class_declaration {
> 0100
> #len($0)
> $0
}
> cafe babe // Magic number
> 0000 0034 // Java Bytecode version
> 0005 // Constant pool size
> 0700 02 // Class at index 2
> #class_declaration($class_name)
> 0700 04 // Class at index 4
> #class_declaration($object_superclass_name)
> 0021 // Supper public
> 0001 0003 // Class pointers
> 0000 0000 0000 0000 // No interfaces, fields, methods, attributes
Q/A
Hexo 支持 小端吗?
不,Hexo 目前只支持 大端。但我们目前正在调查同时支持大端和小端的能力。
我可以将 Hexo 作为库使用吗?
目前不能,但这是未来版本的计划。
不,cmd
函数非常不安全吗?
是的,安全性不是Hexo的目标,请不要用它运行不受信任的代码。
您可以使用安全模式来禁用 cmd
和 eval
函数。请在命令前添加 --safe
标志来启用它。
为什么不安全模式是默认的?
由于Hexo是为快速且不完美的任务设计的,我们决定让它尽可能地灵活。因此,默认的安全模式只会使工作流程复杂化,而不会增加任何有意义的价值。