Hasty Briefsbeta

Bilingual

Uninitialized garbage on ia64 can be deadly (2004)

a year ago
  • #ia64
  • #function-signature
  • #debugging
  • Calling a function with the wrong signature can lead to serious issues, especially on the ia64 architecture.
  • The CreateThread function expects a specific function signature (LPTHREAD_START_ROUTINE), but many mistakenly cast void-returning functions to it.
  • On ia64, registers have an extra 'NaT' (Not a Thing) bit, which indicates invalid values, similar to floating-point NaN.
  • Speculative execution on ia64 can leave registers in a NaT state, leading to STATUS_REG_NAT_CONSUMPTION exceptions if mishandled.
  • Mismatched function signatures or incorrect parameter counts can cause NaT-related crashes, making debugging extremely difficult.
  • The ia64 architecture is less forgiving than i386, punishing shortcuts and mismatches that might work elsewhere.