Недавно решил сравить qsort на разных Windows компиляторах. MinGW сделал это быстрее всех. Это показалось странным, учитывая что это-то C шная функция, а MinGW использует для C функций Microsoft библиотеку. Дело в флагах. Какие есть флаги безопасности у MinGW:
Защита стека
-fstack-protector-all --param ssp-buffer-size=4 -fstack-check
/GS
DEP
-Wl,--nxcompat
/NXCOMPAT
ASLR
-Wl,--dynamicbase
/DYNAMICBASE
64 bit для ASLR(только для 64 битных программ)
-Wl,--high-entropy-va
/HIGHENTROPYVA
Но у MSVC есть ещё один флаг для защиты Enable Control Flow Guard(https://msdn.microsoft.com/en-us/en-en/library/dn919635.aspx)
/guard:cf
Аналог этого на Linux:
https://pax.grsecurity.net/docs/PaXTeam-H2HC15-RAP-RIP-ROP.pdf
https://wiki.gentoo.org/wiki/Hardened/PaX_Quickstart
Вот ещё нашел статейку про Enable Control Flow https://habrahabr.ru/company/dsec/blog/305960/
Вот сейчас пытаюсь разобраться насколько это увеличивает безопасность, а то может пора выкидывать MinGW и самому компилировать ядро Linux для включения PaX...
Если кто-то уже разбирался с этой темой, то прошу поделиться к каким выводам вы пришли...