ETI>>Думаю, что дело в версии и/или настройках компилятора. Пример:
ETI>>ETI>>void (*g_pFunc)() = nullptr;
ETI>>extern "C"
ETI>>__declspec(dllexport)
ETI>>void f()
ETI>>{
ETI>> g_pFunc();
ETI>>}
ETI>>
ETI>>>>>cl /O2 /Zi /MTd /EHsc test.cpp /link /RELEASE /OPT:REF
ETI>>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
ETI>>Copyright (C) Microsoft Corporation. All rights reserved.
ETI>>test.cpp
ETI>>Microsoft (R) Incremental Linker Version 9.00.30729.4999
ETI>>Copyright (C) Microsoft Corporation. All rights reserved.
ETI>>/out:test.exe
ETI>>/debug
ETI>>/RELEASE
ETI>>/OPT:REF
ETI>>test.obj
ETI>> Creating library test.lib and object test.exp
ETI>>
ETI>>ETI>>f: FF25C03F4200 jmp d,[000423FC0]
ETI>>.00401006: CCCCCCCCCCCCCCCCCCCC int 3
ETI>>
TSS>Это безусловно зависит от компилятора, но все таки мы говорим про windows, а она использует микрософтовский компилятор. Соответственно, с прологом там все более менее понятно. Хотя признаться, я не знаю как с этим дела в последних версиях компиляторов.
Так мой пример тоже построен на кодо-генерации MS'овских компилятора и линкера (не самых свежих — Microsoft Visual Studio 9.0).
Мой посыл был в том, что старый компилятор, которым собирали XP, мог оставлять пролог из-за недоработки или специфических опций.