我需要抑制某些功能的缓冲区安全检查 (/GS) 功能 (MSVC),但不需要像 /GS- 那样对整个项目进行抑制。MSVSC 文档https://docs.microsoft.com/en-us/cpp/preprocessor/strict-gs-check?view=vs-2017提示使用#pragma strict_gs_check(off)。不幸的是,它对我不起作用——我仍然在程序集中看到“cookies”。任何帮助,请。
这是最简单的重现代码,这里有大胆的链接: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