Code: Select all
Example.obj : error LNK2019: unresolved external symbol ___security_cookie referenced in function _example_function
Example.obj : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function _example_function
Code: Select all
Example.obj : error LNK2019: неразрешенный внешний символ ___security_cookie ссылки в функциею _example_function
Example.obj : error LNK2019: неразрешенный внешний символ @__security_check_cookie@4 ссылки в функциею _example_function
[1]Убрать флаг /GS (buffer security check) при компиляции. Самый худший вариант! А если переполнение буфера, то что будет?
[2]Дописать в программе(FROM MSDN): // Интересный вариант
Code: Select all
extern "C" const DWORD_PTR __security_cookie = 0xE64EBB40;
extern "C" void __fastcall __security_check_cookie(DWORD_PTR cookie)
{
if (cookie != __security_cookie)
__asm int 3;
}
Code: Select all
extern "C" {
#ifdef _WIN64
#define kDefaultSecurityCookie 0x2B992DDFA23249D6 //?? X64 DWORD
#else /* _WIN64 */
#define kDefaultSecurityCookie 0xBB40E64E //?? X86 DWORD, А почему не 0xE64EBB40
#endif /* _WIN64 */
DWORD_PTR __security_cookie = kDefaultSecurityCookie;
void __fastcall __security_check_cookie(DWORD_PTR) {
return;
/* Immediately return if the local cookie is OK. */
// if (cookie == __security_cookie)
// return;
/* Report the failure */
// report_failure();
}
}; // extern "C"
Написать свой вариант:
security_cookie это частный случай. И имя функции может быть любое.
А вместо __asm int 3; использовать более явное описание.
0x35f1fb6f то-же вполне возможно...))) В принципе в примере [3] есть всё для того, что-бы узнать его значение, а можно не узнавать, просто при компиляции для него будет выделено больше памяти.
Кстати кто может показать более интересные случаи данного вопроса?