我在Visual Studio 2008上测试了一些代码,并注意到security_cookie。我可以理解它的要点,但是我不明白此指令的目的是什么。
rep ret /* REP to avoid AMD branch prediction penalty */
当然我可以理解注释:),但是前缀前缀在和的上下文中是做ret什么的,如果ecx!= 0 会发生什么呢?显然,ecx在调试时将忽略来自的循环计数,这是可以预期的。
我在此处找到此代码(出于安全考虑,由编译器注入):
void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie)
{
/* x86 version written in asm to preserve all regs */
__asm {
cmp ecx, __security_cookie
jne failure
rep ret /* REP to avoid AMD branch prediction penalty */
failure:
jmp __report_gsfailure
}
}
POPMUISE