Здравствуйте, EreTIk, Вы писали:
TSS>>Да, вероятно я не прав насчет стандарта. Тем не менее, по умолчанию компилятор всегда лепит пролог, если явно не указать ему этого не делать. В сорцах win10 видимо явно указана директива __declspec(naked).
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>
Это безусловно зависит от компилятора, но все таки мы говорим про windows, а она использует микрософтовский компилятор. Соответственно, с прологом там все более менее понятно. Хотя признаться, я не знаю как с этим дела в последних версиях компиляторов.