DWORD CalcFuncCrc(PUCHAR funcBegin, PUCHAR funcEnd) { DWORD crc = 0; for (; funcBegin < funcEnd; ++funcBegin) { crc += *funcBegin; } return crc; } #pragma auto_inline(off) VOID DebuggeeFunction() { int calc = 0; calc += 2; calc <<= 8; calc -= 3; } VOID DebuggeeFunctionEnd() { }; #pragma auto_inline(on) DWORD g_origCrc = 0x2bd0; int main() { DWORD crc = CalcFuncCrc((PUCHAR)DebuggeeFunction, (PUCHAR)DebuggeeFunctionEnd); if (g_origCrc != crc) { std::cout << "Stop debugging program!" << std::endl; exit(-1); } return 0; } It was originally published on https://www.apriorit.com/