# RegViewer **Repository Path**: thelxz/RegViewer ## Basic Information - **Project Name**: RegViewer - **Description**: 尝试在AI的帮助下,使用Rust + egui尝试重写RegViewer工具。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-18 - **Last Updated**: 2026-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RegViewer 一个用于查看和操作二进制数据的 Rust 工具集,基于 FLTK 图形界面框架。 ![主UI](data/images/main_ui.png) ## 项目结构 ``` RegViewer/ ├── Cargo.toml # 包配置 ├── src/ │ ├── main.rs # GUI 应用程序入口 │ ├── lib.rs # BinaryVector 库 │ ├── state.rs # 应用程序状态 │ ├── expr_eval.rs # 表达式求值 │ ├── format_bit_field.rs # 位域格式化 │ ├── format_size.rs # 大小格式化 │ └── instruction.rs数据库 ├── data # 指令/ │ ├── fields/ # 寄存器字段定义 (YAML) │ ├── inst/ # 指令定义 (YAML) │ ├── config.yaml # 应用程序配置 │ └── images/ # 界面图片 └── scripts/ # 工具脚本 ``` ## 功能特性 ### BinaryVector 库 `BinaryVector` 结构体提供以下功能: - **创建方式** - `new(length)` - 创建指定长度的空向量 - `from_bin_str(s, length)` - 从二进制字符串创建 - `from_hex_str(s, length)` - 从十六进制字符串创建 - `from_unsigned_dec_str(s, length)` - 从无符号十进制字符串创建 - **基本操作** - `get(index)` - 获取指定位值 - `set(index, value)` - 设置指定位值 - **格式转换** - `to_hex_string()` - 转换为十六进制字符串 - `to_unsigned_dec_string()` - 转换为无符号十进制字符串 - `to_signed_value()` - 转换为有符号大整数 - `to_bin_string()` - 转换为二进制字符串 - `to_u32_lowest_bits()` - 获取低32位 - **位运算** - `bit_not()` - 按位取反 - `bit_not_range(start, end)` - 范围取反 - `bit_set_range(start, end)` - 范围置位 - `bit_clear_range(start, end)` - 范围清零 - `bit_extract_range(start, end)` - 提取范围位到低位 - `resize(new_length)` - 调整向量长度 - `sign_bit()` - 获取符号位 - **移位操作** - `shift_left(n)` - 逻辑左移 - `shift_right_arithmetic(n)` - 算术右移 - `shift_right_logical(n)` - 逻辑右移 - `shift_left_circular(n)` - 循环左移 - `shift_right_circular(n)` - 循环右移 ### RegViewer GUI 应用 基于 FLTK 框架的图形界面应用,提供: - **位显示与编辑** - 位按钮网格显示(支持 8/16/32/64/128 位) - 范围高亮显示(start-end 范围) - 位宽调整时自动调整范围 - **格式转换** - 多种格式输入输出(Hex、Dec、Signed、Bin) - 表达式求值(支持算术和位运算,如 `0x100 + x << 2`) - **操作按钮** - 清零(0)、置一(1)、取反(~) - 范围提取(E):提取范围位到低位 - **寄存器/指令显示** - 寄存器字段显示(从 YAML 文件加载) - 指令解析显示(支持 ARM A64 指令) - 指令搜索(按名称搜索 / 按 bit 值匹配) - Tab 切换同步更新 bit 值 - **界面定制** - 主题切换(Base、Gtk、Gleam、Plastic、Oxy) - 窗口置顶功能 ## 构建与运行 ### 构建 ```bash cargo build --release ``` ### 运行 ```bash cargo run --release ``` ### 测试 ```bash cargo test ``` ### 代码检查 ```bash cargo check cargo clippy cargo fmt ``` ## 依赖项 - `fltk` - GUI 框架 - `num-bigint` - 大整数运算 - `num-traits` - 数值特征 - `serde` / `serde_yaml` - 序列化 - `thiserror` - 错误处理 ## 系统要求 - Rust 1.75+ - 支持的操作系统:Windows / macOS / Linux ## 许可证 MIT License # 已知问题 & TODO - [DONE] BUG: 快速启动工具功能,很多脚本/工具不能正常启动 - [DONE] BUG: 指令识别有时候不对,比如0xd69f03e0y应该是ERET结果识别成TBNZ - TODO: 结合objdump, 添加指令识别自动校验单元测试