Учитывая состояние стека и регистров, можем ли мы предсказать результат неопределенного поведения printf

Вот простой код на C для теста класса:

#include <stdio.h>

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

Скомпилировано и запущено на:

Apple LLVM версия 6.1.0 (clang-602.0.53) (на основе LLVM 3.6.0svn)
Цель:x86_64-Apple-darwin14.5.0

Выход этого кодаundefined, Я пытаюсь предсказать вывод, осматривая память рядомa с отладчиком (X команда в GDB). Например, когда адресa является0x7fff5fbffb98тогда контекст рядом&a как следует:

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

Тогда выводprintf является1606417352, Я знаю, что вывод при использовании неправильного спецификатора не определен. Из любопытства я ожидал, что выходные данные этого неопределенного поведения будут связаны с некоторой памятью из запущенного стека или регистров, но я не выяснил, как это соотнести.

Так какой адрес или регистр используется для установки выхода этогоprintf? Другими словами, учитывая состояние работающего стека и всех значений из всех регистров, можем ли мы предсказать (и если да, то как) результат этого неопределенного поведения?

Ответы на вопрос(2)

Ваш ответ на вопрос