Мне нужно отключить функцию проверки безопасности буфера (/ GS) (MSVC) для некоторых функций, но не для всего проекта, как / GS-выполнение.
Документация MSVSC https://docs.microsoft.com/en-us/cpp/preprocessor/strict-gs-check?view=vs-2017 предлагает использовать #pragma strict_gs_check (off). К сожалению, это не работает для меня - я все еще вижу «куки» в сборке. Любая помощь, пожалуйста.
Это самый простой код для воспроизведения, ссылка на это здесь: https://godbolt.org/z/gYiGam
#include <memory>
struct Tmp {
char v[8];
};
//#pragma check_stack(off)
#pragma strict_gs_check(off)
int make1(Tmp& a)
{
Tmp r;
return memcmp(&r, &a, sizeof(r));
}
//result
//-------------------------
pop esi
mov ecx, DWORD PTR __$ArrayPad$[esp+12]
xor ecx, esp
call @__security_check_cookie@4
add esp, 12 ; 0000000cH
ret 0
$LN6@make1:
mov ecx, DWORD PTR __$ArrayPad$[esp+16]
sbb eax, eax
pop esi
xor ecx, esp
or eax, 1
call @__security_check_cookie@4
add esp, 12 ; 0000000cH
ret 0
int make1(Tmp &) ENDP ; make1