2

一部の関数ではバッファー セキュリティ チェック (/GS) 機能 (MSVC) を抑制する必要がありますが、/GS- のようにプロジェクト全体では抑制しません。MSVSC ドキュメントhttps://docs.microsoft.com/en-us/cpp/preprocessor/strict-gs-check?view=vs-2017では、#pragma strict_gs_check(off) を使用するよう求められます。残念ながら、私にはうまくいきません - アセンブリに「Cookie」がまだ表示されています。助けてください。

これは再現するのが最も簡単なコードです

#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
4

2 に答える 2