Skip to content

Releases: HamsterAPig/ElfStaticView

Release v0.3.11

Choose a tag to compare

@HamsterAPig HamsterAPig released this 16 Jul 00:47
  • fix: unify DWARF type layout addressing

Full Changelog: v0.3.10...v0.3.11

Release v0.3.10

Choose a tag to compare

@HamsterAPig HamsterAPig released this 30 Jun 05:47

新增

  • 新增 GUI 启动诊断日志:
  • 默认写入 %LOCALAPPDATA%\ElfStaticView\logs\startup.log
  • 日志不可写时会回退到临时目录 -记录 GLFW 初始化、OpenGL 上下文尝试、GL_VENDOR、GL_RENDERER、GL_VERSION、GLSL_VERSION-

新增图形环境诊断命令:

  powershell.\elf-static-view-cli.exe diagnose.\elf-static-view.exe diagnose
  • diagnose 会检测 GLFW 初始化和多个 OpenGL 上下文候选:
  • OpenGL3.3 Core / #version330
  • OpenGL3.2 Core / #version150
  • OpenGL3.0 / #version130
  • OpenGL2.1 / #version120

修复

  • 修复 GUI 启动失败时“无任何反应”的问题。

  • glfwInit、glfwCreateWindow、ImGui OpenGL 初始化失败时,会写日志并弹出错误提示。

  • 错误提示会包含启动日志路径,方便定位问题机原因。

  • 修复单一 OpenGL3.3 Core 要求过硬的问题。
    -现在会按候选列表逐级回退,避免部分显卡驱动、远程桌面或虚拟显示环境下直接静默失败。

  • 修复 GUI 子系统程序执行命令行参数时无输出的问题。

  • .\elf-static-view.exe diagnose现在会绑定父控制台并正常输出诊断结果。

  • 启动阶段触发结构化异常时,会写入日志并弹窗提示,而不是直接退出。

发布与构建

  • Windows Release 改为静态链接 MSVC运行库 /MT。
  • 降低裸 .exe 在用户机器上因为 VC++ Redistributable 缺失或损坏导致无法启动的概率。
  • CI 增加 Release 导入表检查。
  • 禁止发布产物导入 MSVCP140D.dll、VCRUNTIME140D.dll、ucrtbased.dll 等 Debug CRT。
  • 同时检查 Release产物不依赖 MSVC runtime DLL。

面向用户的变化

  • 如果 GUI 无法启动,不应再表现为“点了没反应”。
  • 遇到问题时,可以直接运行:
  powershell.\ElfStaticView-CLI-<version>-windows-x64.exe diagnose

或:

  powershell.\ElfStaticView-<version>-windows-x64.exe diagnose

来收集图形环境诊断信息。

Full Changelog: v0.3.9...v0.3.10

Release v0.3.9

Choose a tag to compare

@HamsterAPig HamsterAPig released this 30 Jun 03:09

Release Note

修复

  • 修复 DW_FORM_ref_sig8 指向 .debug_types type unit 时,成员类型未完整物化的问题。
  • 修复 FlagValue.all、FlagValue.bits 等本地 DW_FORM_ref4 类型引用显示为 的问题。
  • 修复数组元素、union 成员、bitfield 成员在 ref_sig8 debug_types 场景下无法继续展开的问题。

改进

  • .debug_types 手工兜底解析现在会索引同一 type unit 中的顶层 sibling DIE,包括:
  • DW_TAG_base_type
  • DW_TAG_array_type
  • 带 DW_AT_signature 的声明型 struct / union / class
  • 本地 type unit 引用会生成内部稳定类型 ID,并递归写入类型图,避免展开器找不到类型。

测试

  • 扩展 ref_sig8_debug_types direct / indirect fixture 覆盖。
  • 新增断言覆盖:
  • global_value.flags[0].all [StaticLayoutKnown] unsigned int
  • global_value.flags[0].bits [StaticLayoutKnown] FlagBits
  • global_value.flags[0].bits.enabled [StaticLayoutKnown] unsigned int

验证

text.\build\elf-static-view-cli.exe dump .\build\fixtures\ref_sig8_debug_types.elf --show-runtime-only --symbol
global_value --expand-depth8.\build\elf-static-view-cli.exe dump .\build\fixtures\ref_sig8_debug_types_indirect.elf
--show-runtime-only --symbol global_value --expand-depth8.\build\tests\elf_static_view_tests.exe

Full Changelog: v0.3.8...v0.3.9

Release v0.3.8

Choose a tag to compare

@HamsterAPig HamsterAPig released this 29 Jun 01:11
  • 修复 C2000 DWARF 格式当中,部分类内成员数组的变量无法展开的问题

Full Changelog: v0.3.7...v0.3.8

Release v0.3.7

Choose a tag to compare

@HamsterAPig HamsterAPig released this 28 Jun 11:41
ecc81d2
  • 修复 C2000 DWARF 格式当中,部分类内成员数组的变量无法展开的问题

Release v0.3.6

Choose a tag to compare

@HamsterAPig HamsterAPig released this 01 Jun 16:47

Release v0.3.6

新增

  • 静态地址查询新增 flatten_composite_members 选项,可在筛选前展开 struct、class、union 成员。
  • 开启成员展开后,父对象名称可以命中成员路径,例如 objADC.name、objADC.b[0]、objADC.b[1]。
  • 展开后的成员路径保留实例名前缀,例如 a_p.name 与 b_p.name,避免不同实例成员被错误合并。
  • 结构体内部数组展开继续受 max_array_elements 限制,避免查询结果无限膨胀。
  • README 补充了静态地址查询成员展开的示例用法。

修复

  • 修复 GCC supplementary reference fixture 的补丁脚本,正确将 DW_AT_type 的 form 改写为目标 DWARF form。
  • 修复 DW_FORM_ref_sup4 / DW_FORM_ref_sup8 类型引用解析:在 libdwarf 无法直接解析时,手动读取 supplementary DIE
    offset。
  • 修复 DW_FORM_ref_addr fixture 的 form 改写位置,确保 fixture 真正覆盖 ref_addr 解析路径。
  • 修复 supplementary reference fixture 中 sup_value 被错误标记为不可用的问题;现在可保留 StaticAddressKnown 静态地
    址状态。
  • 移除 .debug_types 解析里未使用的 debug types offset 读取,减少无效逻辑。

测试

  • 新增静态地址查询测试,覆盖:
    • 默认不展开结构体成员;
    • 开启 flatten_composite_members 后先展开再筛选;
    • 不同实例成员路径保留实例名前缀;
    • 内部数组展开仍遵守 max_array_elements;
    • 查询缓存结果保持稳定。
  • 加强 DWARF fixture 验证,覆盖 DW_FORM_ref_sup4、DW_FORM_ref_sup8、DW_FORM_ref_addr 的类型解析与静态地址保留行
    为。

Full Changelog: v0.3.5...v0.3.6

Release v0.3.5

Choose a tag to compare

@HamsterAPig HamsterAPig released this 31 May 15:35

优化精简导出时变量的拼接方式,默认拼接变量的父名称,即 obj.a 这种形式。

Full Changelog: v0.3.4...v0.3.5

Release v0.3.4

Choose a tag to compare

@HamsterAPig HamsterAPig released this 31 May 13:55

ElfStaticView Release Notes

亮点概览

1. 新增静态地址查询 API

本次新增了一套面向库调用方的静态地址查询能力,方便直接从 ProjectModel 或 ELF 文件中提取静态变量地址结果,而不必依赖 UI
交互或手动遍历展开树。

新增的公开接口包括:

  • StaticAddressQuerySession
  • query_static_addresses(...)
  • query_static_addresses_from_file(...)

同时新增了配套数据结构:

  • StaticAddressQueryOptions
  • StaticAddressResult

这套查询能力支持:

  • 按名称查询 name_query_text
  • 按路径规则过滤 path_rules_text
  • 控制是否包含 runtime-only 变量
  • 默认只返回静态地址已知的变量
  • 控制数组展开上限 max_array_elements

测试侧已经覆盖了这些核心行为:

  • 名称查询
  • 多规则路径过滤
  • 数组展开
  • 默认过滤 runtime-only
  • Session 级缓存复用稳定性

2. 增强 CMake 集成与包消费方式

为了让外部项目更容易复用核心库,这一段还补上了包导出能力和消费验证:

  • 新增 ElfStaticViewConfig.cmake 导出配置
  • 支持 find_package(ElfStaticView CONFIG REQUIRED)
  • 支持通过 add_subdirectory(...) 集成
  • 新增 package smoke tests,验证 elf_static_view::core 可被正常链接

这意味着从 v0.3.1 之后,ElfStaticView 作为一个可复用 CMake 组件的可接入性更完整了。

3. 修复地址复制在负偏移下的错误结果

修复了 UI 中 Ctrl+C 复制“偏移后地址”时的计算错误。
close #1

问题表现:

  • 预览和选择树显示正确
  • 但复制结果在负偏移场景会把符号语义丢掉

示例:

  • 原始地址:0x108055a3
  • 偏移:-0x10800000
  • 正确结果应为:0x55a3
  • 修复前复制结果错误为:0x201055a3

修复后:

  • Ctrl+C 与右键“复制偏移后地址”统一复用同一套偏移计算逻辑
  • 复制结果与树和详情面板展示保持一致
  • 相关提示文案也统一为“偏移后地址”,不再使用容易误导的“减偏移”表述

对使用者的实际影响

如果你是库调用方,这一段更新最重要的是:

  • 可以直接把 ElfStaticView 当作 CMake 依赖来接入
  • 可以通过新的静态地址查询 API 编程式拿到地址结果

如果你主要使用 GUI,这一段更新最重要的是:

  • 负偏移场景下 Ctrl+C 复制地址终于和界面显示一致了

包含的提交

  • 45b92e0 feat: add static address query api
  • f8e4c51 fix: unify adjusted address copy logic

Full Changelog: v0.3.2...v0.3.3

Full Changelog: v0.1.5...v0.3.4

Release v0.3.1

Choose a tag to compare

@HamsterAPig HamsterAPig released this 27 May 10:35

TI C2000 COFF DWARF 支持

  • ELFStaticView 现在可以加载 TI C2000 Code Generation Tools 生成的 TI-COFF 格式目标文件,解析其中的 DWARF 调试信息。涵盖完整的 section 读取、DWARF access method 适配、location expression 解析和符号加载隔离。
  • 新增 6 个提交处理 COFF 兼容路径。打开文件重建后自动重新加载如果当前打开的项目文件在外部被删除后重新生成(如 IDE 重新编译产生新的 .out 文件),ElfStaticView 会自动检测并重新加载,无需手动操作。

修复

  • dwarf_reader.cpp:COFF 文件不再误调用 ELF 符号表补址逻辑;TI-COFF 变量地址依赖 DWARF location 表达式(49a213b)
  • dwarf_wrappers.cpp:修复 COFF 路径下 libdwarf section 索引传递和 access object 生命周期管理
  • dwarf_reader.cpp:read_location_description、data_member_location_offset 等函数增加 address/offset size 感知,适配非
  • 64-bit ELF 环境

Full Changelog: v0.2.1...v0.3.1

Release v0.2.1

Choose a tag to compare

@HamsterAPig HamsterAPig released this 26 May 09:00

Release Notes

重点更新

  • 优化变量过滤体验:过滤结果会被缓存,并改为异步构建,减少大体量变量树筛选时的界面卡顿。
  • 增强 C2000 ELF / DWARF 支持:e_machine=141 会显示为 TI TMS320C2000,并支持 TI 工具链常见的成员偏移表达式。
  • 修复成员地址展开:缺省位置属性的首个实例成员会按对象基址推断地址,避免显示为 NA。
  • 补充工程忽略规则:忽略本地 Visual Studio 生成文件,减少开发机本地状态对工作区的干扰。

修复与改进

变量过滤

  • 缓存变量过滤匹配结果,避免相同规则重复遍历变量树。
  • 将变量过滤构建流程改为后台异步执行,筛选期间 UI 可继续响应。
  • 调整过滤状态管理,支持过滤任务的开始、完成和过期结果丢弃。
  • 补充过滤缓存、异步状态和防抖相关测试。

ELF / DWARF 解析

  • 新增 C2000 机器类型识别:e_machine=141 显示为 TI TMS320C2000。
  • 保持 ELF 字节序严格来自 EI_DATA,不会因为 C2000 机器类型强制切换端序。
  • 支持 DW_AT_data_member_location = DW_OP_plus_uconst <offset> 的成员偏移解析。
  • 对缺少 DW_AT_data_member_location 的首个非声明实例成员推断 relative_offset=0,使其展开地址等于对象基址。
  • 避免对复杂 DWARF 位置表达式做猜测解析,无法明确识别时仍保持地址为空。

测试与 fixture

  • 增加最小 ELF metadata fixture,覆盖 C2000 e_machine=141 与 LittleEndian 显示。
  • 增加 DW_OP_plus_uconst 成员偏移 fixture,验证成员偏移和展开地址计算。
  • 增加首成员缺省位置 fixture,验证首成员地址使用对象基址。
  • 将静态变量期望文件从 .json 重命名为 .md,更贴合测试期望文件的文本说明用途。

工程维护

  • .gitignore 增加本地 Visual Studio 相关文件规则。

Full Changelog: v0.2.0...v0.2.1