История изменений
Исправление alysnix, (текущая версия) :
и даже без линка - вот она прописывает по указателю, что вернулся из do_cast
call 50 <tst+0x10>
R_X86_64_PLT32 do_cast-0x4
mov BYTE PTR [rax],0x1
Единственное чего добьёшся этим do_cast() - это заставишь компилятор гарантированно хранить где-то в памяти fl, что-бы утекший в do_cast() указатель был валидным.
быть не могет. просто у тебя тест кривой. очевидно что переменную прописали, и это плохо кончится. например ее подставят в вызов снова внешней функции не по значению, а по указателю. и там она будет уже true.
это просто эффект локальных оптимизаций у тебя слегка выправляет ситуацию. но это лишь частный случай.
Исходная версия alysnix, :
?и даже без линка - вот она прописывает по указателю, что вернулся из do_cast
call 50 <tst+0x10>
R_X86_64_PLT32 do_cast-0x4
mov BYTE PTR [rax],0x1
Единственное чего добьёшся этим do_cast() - это заставишь компилятор гарантированно хранить где-то в памяти fl, что-бы утекший в do_cast() указатель был валидным.
быть не могет. просто у тебя тест кривой. очевидно что переменную прописали, и это плохо кончится. например ее подставят в вызов снова внешней функции не по значению, а по указателю. и там она будет уже true.
это просто эффект локальных оптимизаций у тебя слегка выправляет ситуацию. но это лишь частный случай.