首页
/ Selfie项目中Rotor模块浮点异常问题分析

Selfie项目中Rotor模块浮点异常问题分析

2025-07-01 08:28:37作者:钟日瑜

在Selfie项目的Rotor分支近期更新中,开发团队发现了一个导致Rotor模块无法正常执行反汇编操作的严重问题。该问题表现为程序在执行过程中抛出"Floating point exception"错误并导致核心转储。

问题现象

当用户尝试使用Rotor模块对编译后的RISC-U可执行文件进行反汇编操作时,系统会输出以下错误信息:

./rotor: ================================================================================
./rotor: this is the selfie system from selfie.cs.uni-salzburg.at with
./rotor: 64-bit unsigned integers and 64-bit pointers hosted on Linux
./rotor: ================================================================================
./rotor: 10688 bytes with 1497 64-bit RISC-U instructions and 2496 bytes of data loaded from /home/jean/Desktop/test
./rotor: ********************************************************************************
./rotor: 146733 lines of model formulae generated
./rotor: --------------------------------------------------------------------------------
Floating point exception (core dumped)

问题复现步骤

  1. 首先编译Rotor模块:

    make rotor
    
  2. 使用RISC-V工具链编译测试用例:

    riscv64-unknown-elf-gcc -Wall -Wextra -D'uint64_t=unsigned long' examples/symbolic/division-by-zero-3-35.c -o test
    
  3. 运行Rotor进行反汇编:

    ./rotor -l test - 0 -s
    

技术分析

浮点异常(Floating point exception)通常发生在以下几种情况:

  1. 除以零操作
  2. 无效的算术运算
  3. 溢出或下溢
  4. 精度损失

在Selfie项目的上下文中,Rotor模块负责符号执行和反汇编功能。从错误发生的时机来看,问题出现在模型公式生成之后,反汇编过程之前,表明可能是在处理某些特定指令或数据时触发了异常。

解决方案

开发团队在后续提交(84cae663)中修复了这个问题。虽然具体修复细节未完全披露,但可以推测修复可能涉及:

  1. 对除法操作增加了数值范围验证
  2. 修正了某些算术运算的异常处理逻辑
  3. 改进了符号执行引擎对特殊情况的处理

预防措施

为避免类似问题再次发生,建议:

  1. 在关键算术运算前增加数值范围验证
  2. 实现更完善的异常处理机制
  3. 增加针对特殊输入值的测试用例
  4. 考虑使用安全数学库替代原始运算

总结

这个问题的发现和修复展示了Selfie项目团队对代码质量的重视。浮点异常这类问题虽然看似简单,但在符号执行和反汇编这种复杂场景下,可能会引发连锁反应。及时的修复确保了Rotor模块的稳定性和可靠性,为后续的符号执行和分析工作奠定了坚实基础。

登录后查看全文
热门项目推荐
相关项目推荐