#二进制 #命令行工具 #简单

nightly app hexo

小巧的二进制编写工具,满足您的需求

23 个版本 (7 个破坏性版本)

0.9.3 2024 年 7 月 10 日
0.7.7 2024 年 7 月 1 日

#166命令行工具

Download history 4/week @ 2024-05-17 1/week @ 2024-05-24 355/week @ 2024-05-31 261/week @ 2024-06-07 32/week @ 2024-06-14 2/week @ 2024-06-21 291/week @ 2024-06-28 459/week @ 2024-07-05 90/week @ 2024-07-12 37/week @ 2024-07-19 216/week @ 2024-07-26

每月 253 次下载

Apache-2.0

75KB
2K SLoC

Hexo | 10110

Crates.io Total Downloads Crates.io Total Downloads GitHub top language

Crates.io License GitHub commit activity

小巧的二进制编写工具,满足您的需求

安装

cargo install hexo

命令行界面

使用 hexo -h 获取完整的 CLI 帮助手册。

参数

  • log-level : 设置日志级别,可能的值:debuginfowarnerrornone。默认:info

  • safe : 启用安全模式,将禁用如 cmdeval 这样的不安全函数。默认:false

命令

build

接受 hexo 格式的 source 文件并将其编译为二进制文件 output

hexo build --source <path to source> --output <path to output>

watch

接受 hexo 格式的 source 文件并将其编译为二进制文件 output。当 source 文件更改时将重新编译

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 的目标,请勿使用它运行不受信任的代码。

您可以使用安全模式来禁用 cmdeval 函数。请在命令前添加 --safe 标志以启用它。

为什么默认为不安全模式?

由于Hexo是为快速和脏活累活设计的,我们决定使其尽可能灵活。因此,默认的安全模式只会使工作流程复杂化,而不会增加任何有意义的价值。

依赖项

~4–15MB
~135K SLoC