Dado el estado de la pila y los registros, ¿podemos predecir el resultado del comportamiento indefinido de printf?

Aquí hay un código C simple para una prueba de clase:

#include <stdio.h>

int main() {
  float a = 2.3;
  printf("%d\n", a);
  return 0;
}

Compilado y ejecutado en:

Apple LLVM versión 6.1.0 (clang-602.0.53) (basado en LLVM 3.6.0svn)
Objetivo:x86_64-apple-darwin14.5.0

La salida de este código esundefined. Estoy tratando de predecir la salida inspeccionando la memoria cercaa con el depurador (X comando en gdb). Por ejemplo, cuando la dirección dea es0x7fff5fbffb98, entonces el contexto cercano&a es como sigue:

0x7fff5fbffb98: 1075000115
0x7fff5fbffb9c: 0
0x7fff5fbffba0: 1606417336
0x7fff5fbffba4: 32767
0x7fff5fbffba8: -1754266167
0x7fff5fbffbac: 32767
0x7fff5fbffbb0: -1754266167
0x7fff5fbffbb4: 32767

Entonces la salida deprintf es1606417352. Sé que la salida cuando se usa un especificador incorrecto no está definida. Por curiosidad, esperaba que el resultado de este comportamiento indefinido estuviera relacionado con algo de memoria de la pila o los registros en ejecución, pero no he descubierto cómo correlacionarlo.

Entonces, ¿qué dirección o registro se utiliza para establecer la salida de esteprintf? En otras palabras, dado el estado de la pila en ejecución y todos los valores de todos los registros, ¿podemos predecir (y si es así, cómo) la salida de este comportamiento indefinido?

Respuestas a la pregunta(2)

Su respuesta a la pregunta