Hasty Briefsbeta

双语

Uninitialized garbage on ia64 can be deadly (2004)

a year ago
  • #ia64
  • #function-signature
  • #debugging
  • 使用错误的函数签名调用函数可能导致严重问题,在ia64架构上尤其如此。
  • CreateThread函数需要特定的函数签名(LPTHREAD_START_ROUTINE),但许多人错误地将void返回类型的函数强制转换给它。
  • 在ia64架构中,寄存器有一个额外的'NaT'(非有效值)位,用于标记无效值,类似于浮点数的NaN。
  • ia64的推测执行可能使寄存器处于NaT状态,如果处理不当会导致STATUS_REG_NAT_CONSUMPTION异常。
  • 函数签名不匹配或参数数量错误可能引发NaT相关的崩溃,这使得调试变得极其困难。
  • ia64架构比i386更严格,会惩罚那些在其他架构可能侥幸通过的捷径操作和类型不匹配行为。