You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GDB中直接设置浮点寄存器的RAW原始字节值(含NAN/INF场景)

GDB设置特殊浮点寄存器值的解决方案

核心通用方法

你提到的(void*)强转语法可以直接实现原始字节写入,配合类型指定可以覆盖所有单/双精度特殊浮点值的设置需求:

  • 64位双精度浮点寄存器直接用set (void*)$fN = <原始64位十六进制值>即可写入
  • 32位单精度浮点寄存器使用set {float}&$fN = <原始32位十六进制值>写入

所有特殊值对应设置指令(将$fN替换为你要操作的寄存器编号即可)

双精度(64位)

  • 正pynan:set (void*)$fN = 0x7FFFC00000000000
  • 负pynan:set (void*)$fN = 0xFFFC000000000000
  • 正qnan:set (void*)$fN = 0x7FFFC00000000001
  • 负qnan:set (void*)$fN = 0xFFFC000000000001
  • 正snan:set (void*)$fN = 0x7FFF800000000001
  • 负snan:set (void*)$fN = 0xFFF8000000000001
  • 正inf:set (void*)$fN = 0x7FF0000000000000
  • 负inf:set (void*)$fN = 0xFFF0000000000000
  • 负零:set (void*)$fN = 0x8000000000000000

单精度(32位)

  • 正pynan:set {float}&$fN = 0x7FC00000
  • 负pynan:set {float}&$fN = 0xFFC00000
  • 正qnan:set {float}&$fN = 0x7FC00001
  • 负qnan:set {float}&$fN = 0xFFC00001
  • 正snan:set {float}&$fN = 0x7F800001
  • 负snan:set {float}&$fN = 0xFF800001
  • 正inf:set {float}&$fN = 0x7F800000
  • 负inf:set {float}&$fN = 0xFF800000
  • 负零:set {float}&$fN = 0x80000000

设置完成后执行info reg $fN即可通过输出的raw字段验证写入的原始字节是否正确。如果是x86等使用xmm/ymm等别名浮点寄存器的架构,替换指令中的$fN为对应寄存器名即可通用。

内容的提问来源于stack exchange,提问作者lockecoleff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:06:04