mentebinaria/dz6
GitHub: mentebinaria/dz6
一款受 Vim 启发的快速终端十六进制编辑器,专注于在 TUI 环境中高效查看和编辑二进制文件。
Stars: 147 | Forks: 12

[](https://www.bestpractices.dev/projects/12656)
# dz6
受 Vim 启发的快速 TUI 十六进制编辑器
## 功能
- 即使在编辑大文件时也非常快速
- 在终端 / 文本用户界面 (TUI) 中运行
- 类似 Vim 的按键绑定
- 可配置选项
- 支持十六进制或 ASCII 编辑
- 带有正则表达式过滤的字符串列表
- 多种智能浏览文件的方式
- 查找字符串和十六进制字节
- 跨平台
- 开源
## 演示
[](https://asciinema.org/a/801539)
## 安装
### Rust 包管理器(所有操作系统)
按照[此处](https://rust-lang.org/tools/install/)的说明安装 **cargo**。然后,打开
终端并输入:
```
cargo install dz6
```
### Arch Linux(通过 AUR)
```
yay -S dz6
```
### FreeBSD
```
pkg install dz6
```
### Windows
如果你安装了 [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/),请使用以下命令安装 dz6:
```
winget install mentebinaria.dz6
```
或者,下载适合你系统的 [发布](https://github.com/mentebinaria/dz6/releases)包。
## 用法
```
Usage: dz6 [OPTIONS]
Arguments:
File to open
Options:
-o, --offset Initial cursor offset (hex default; `t` suffix = decimal) [default: 0]
-r, --readonly Set read-only mode
-h, --help Print help
-V, --version Print version
```
一旦在 **dz6** 中加载了文件,你就可以使用以下命令。
### 全局按键绑定
| 按键 | 操作 | 提示 |
| ------- | ---------------- | ------------------------- |
| `Enter` | 切换视图 | 当前为十六进制和文本视图 |
| `Alt+l` | 打开日志窗口 | |
| `:` | 打开命令栏 | 参见 [命令](#commands) |
#### 命令
| 命令 | 操作 | 参数 | 提示/示例 |
| ---------------- | ---------------------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------- |
| `` | 跳转到偏移量 | | 默认为十六进制;`t` 后缀 = 十进制;`+` 前缀 = 向前跳转;`-` 前缀 = 向后跳转 |
| `cmt` | 将 `` 添加到 `` | `` `` | `cmt 1000 "my comment"` (在偏移量 0x1000 处添加注释;偏移量遵循上述相同规则) |
| `sel` | 从 `` 开始选择 `` 个字节 | `` `` | `sel 40 10t` (从偏移量 0x40 开始选择 10 个字节) |
| `set byteline` | 设置每行的字节数 | ` or `auto` | `set byteline 8` (默认为 16;`auto` 启用基于屏幕宽度的自动设置) |
| `set ctrlchar` | 设置 ASCII 转储中非图形值的显示字符 | `` | `set ctrlchar " "` 会设置一个空格 (默认: `.`) |
| `set db` | 开启数据库文件保存/加载 (默认) | | 将使用带有 `.dz6` 扩展名的数据库文件来存储文件的标签和注释 |
| `set nodb` | 关闭数据库文件保存/加载 | | |
| `set dimzero` | 仅将空字节置灰 (默认) | | |
| `set dimctrl` | 将所有控制字符置灰 | | 所有非图形字符将被置灰 |
| `set nodim` | 关闭字节变灰 | | |
| `set theme` | 设置主题 | `dark` 或 `light` | `set theme light` (默认: `dark`) |
| `set wrapscan` | 启用搜索结果循环 | | |
| `set nowrapscan` | 禁用搜索结果循环 | | |
| `w` | 将更改写入文件 | | |
| `wq` 或 `x` | 将更改写入文件并退出 | | |
| `q` | 不保存更改直接退出 | | 在替换模式下,`T` (截断) 是个例外,因为它会立即修改文件。 |
如果需要永久设置,请创建一个 `$HOME/.dz6init` 文件,将上述任何命令逐行写入其中。dz6 将在启动时加载它。
### 十六进制视图
| 按键 | 操作 | 提示 |
| ----------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| 方向键 | 导航 | 类似 Vim 的 `h`, `j`, `k`, `l` 也可以 |
| `w` `d` `q` | 分别向前移动一个 word (2 字节)、dword (4 字节) 或 qword (8 字节) | 使用大写字母 `W`、`D` 和 `Q` 可以向后移动 |
| `o` | 跳到下一个其他字节 (即与光标下的字节不同的字节) | `O` 向后跳转 |
| `Home` 或 `0` | 将光标移动到当前行的开头 | |
| `End` 或 `$` | 将光标移动到当前行的末尾 | |
| `Ctrl+Home` 或 `g` | 跳转到第一个偏移量 | |
| `Ctrl+End` 或 `G` | 跳转到文件中的最后一个偏移量 | |
| `Ctrl+f` 或 `Page Down` | 下移一页 | |
| `Ctrl+b`或 `Page Up` | 上移一页 | |
| `r` | 进入[替换模式](#hex-replace-mode) | |
| `z` | 将光标下的字节设置为零 | |
| `~` | 如果适用,更改大小写 | 仅适用于 ASCII 字母范围内的字节 |
| `Ctrl+a` | 递增光标下的字节 | |
| `Ctrl+x` | 递减光标下的字节 | |
| `v` | 进入[选择模式](#hex-selection-mode) | |
| `u` | 撤销对缓冲区的最后一次更改 | 在写入文件 (`:w`) _之前_ 使用 |
| `/` | 向前搜索 | 搜索整个文件。`Tab` 在 ASCII 和十六进制搜索之间切换 |
| `n` | 查找下一个 (向前) | |
| `?` | 向后搜索 | 搜索整个文件。`Tab` 在 ASCII 和十六进制搜索之间切换 |
| `N` | 查找下一个 (向后) | |
| `s` | 打开[字符串](#strings)窗口 | |
| `Backspace` | 返回到上一个访问过的偏移量 | 例如在使用了跳转命令后非常有用 |
| `+` | 将当前偏移量添加到标签 | |
| `-` | 跳转到最后添加的标签 | |
| `Alt+1..8` | 跳转到标签 | |
| `Alt+-` | 移除最后添加的标签 | 光标必须位于被标记的偏移量处 |
| `Alt+0` | 清除标签 | |
| `Alt+h` | 切换字节高亮 | |
| `;` | 为选定的偏移量添加注释 | |
| `Ant+n` | 打开[名称](#names)窗口。添加的注释将会显示在其中。 | |
| `=` | 打开[计算器](#calculator) | |
#### 十六进制选择模式
| 按键 | 操作 | 提示 |
| ---------- | -------------------------------- | -------------------------------------------------------------------------------- |
| 方向键 | 导航 | 类似 Vim 的 `h`, `j`, `k`, `l` 也可以 |
| `~` | 如果适用,更改大小写 | 仅适用于 ASCII 字母范围内的字节 |
| `n` | 用 NOP 填充选定的字节 | 这会使 dz6 进入替换模式;按 `Enter` 保存缓冲区;`Esc` 取消 |
| `z` | 用零填充选定的字节 | 同上 |
| `y` | 将字节复制到系统剪贴板 | 目前还没有粘贴命令 |
| `Alt+m` | 用随机颜色标记一个块 | 再次按 `Alt+m` 可选择另一种颜色。使用 `[` 和 `]` 导航到块边界 |
| `Esc` | 返回普通模式 | |
#### 十六进制替换模式
| 按键 | 操作 | 提示 |
| ----------- | ---------------------------------------------------------- | -------------------------------------------------------- |
| 方向键 | 导航 | |
| `Backspace` | 与向左导航相同 | |
| `~` | 如果适用,更改大小写 | 仅适用于 ASCII 字母范围内的字节 |
| `z` | 将字节设置为零 | |
| `Ctrl+a` | 递增字节 | |
| `Ctrl+x` | 递减字节 | |
| `Esc` | 返回普通模式 | 更改将保存到缓冲区,但尚未写入文件 |
| `Tab` | 在十六进制和 ASCII 转储之间循环切换,以 ASCII 形式编辑文件 | |
| `t` | 移除选定偏移量之后的所有字节 | 请注意,此操作无法撤销 |
| `T` | 移除选定偏移量之前的所有字节 | 请注意,此操作无法撤销 |
#### 名称
| 按键 | 操作 | 提示 |
| ----------- | ------------------------------------------------ | ------------ |
| 方向键 | 导航 | 仅限上下 |
| `f` | 使用正则表达式过滤名称 | |
| `D` | 删除所有名称 | |
| `Esc` | 关闭 | |
| `End` | 选择显示的最后一项 | |
| `Ctrl+End` | 选择列表中的最后一项 | |
| `Home` | 选择显示的第一项 | |
| `Ctrl+Home` | 选择列表中的第一项 | |
| `Page Down` | 下移一页 | |
| `Page Up` | 上移一页 | |
| `Enter` | 在十六进制转储中定位到该名称并关闭窗口 | |
#### 字符串
| 按键 | 操作 | 提示 |
| ----------- | -------------------------------------------------- | ------------------------------ |
| 方向键 | 导航 | 仅限上下 |
| `f` | 使用正则表达式过滤字符串 | |
| `R` | 从文件中重新读取字符串 | 如果你更改了文件,这会很有用 |
| `Esc` | 关闭 | |
| `End` | 选择显示的最后一项 | |
| `Ctrl+End` | 选择列表中的最后一项 | |
| `Home` | 选择显示的第一项 | |
| `Ctrl+Home` | 选择列表中的第一项 | |
| `Page Down` | 下移一页 | |
| `Page Up` | 上移一页 | |
| `Enter` | 在十六进制转储中定位到该字符串并关闭窗口 | |
#### 计算器
64 位计算器。默认基数为十进制,但你可以使用 0x 作为十六进制数字的前缀。预定义变量:
| 变量 | 值 | 长度 |
| -------- | --------------------------- | --------------------------------------------------------- |
| `@x` | 光标下的有符号值 | `x` 为 `b` (byte)、`w` (word)、`d` (dword) 或 `q` (qword) |
| `@X` | 光标下的无符号值 | `X` 为 `B` (byte)、`W` (word)、`D` (dword) 或 `Q` (qword) |
| `@o` | 当前偏移量 | 在 32 位系统上为 dword;在 64 位系统上为 qword |
| `@O` | 上一个访问过的偏移量 | 同上 |
使用上下方向键可浏览历史记录。
### 文本视图
| 按键 | 操作 |
--- | ------------------------------ |
| `e` | 打开编码选择对话框 |
## 常见问题
**1. 我使用的是 Mac。我该如何使用 `Alt` 键?!**
iTerm2 用户:前往 `Settings → Profiles → (你的配置文件) → Keys`,并将 `Left Option key` 设置为 `Esc+`。这将使 `Option` 键的作用类似于 `Alt`。
**2. 所有 Vim 命令都能在 dz6 中使用吗?**
不能。有些按键绑定表现相似,但 dz6 并不追求与 Vim 100% 兼容。例如,在 dz6 中,`o` 用于移动到下一个其他字节,而在 Vim 中,相同的键用于在当前行下方打开一个新行。
**3. dz6 现在稳定了吗?**
没有。预计只有在 v1.0.0 版本才会稳定。在此之前,可能会出现破坏性的更改。
标签:ASCII编辑, Linux工具, Rust, SNI设置, TUI, Vim风格, 二进制数据分析, 二进制文件分析, 云安全监控, 云资产清单, 十六进制搜索, 十六进制查看器, 可视化界面, 数据恢复, 文件编辑工具, 文本处理, 正则过滤, 端口探测, 系统管理工具, 终端用户界面, 网络流量审计, 逆向工程, 通知系统, 静态分析