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更严格,会惩罚那些在其他架构可能侥幸通过的捷径操作和类型不匹配行为。