C++中宏定义带来的潜在风险和问题
代码段如下:
#ifdef TEST_FLAG #define MACRO_TEST_1(x) OutputDebugString(x) #else #define MACRO_TEST_1 #endif static TCHAR g_all[] = _T("test_for_macro\r\n"); TCHAR* test_for_macro() { OutputDebugString(_T("call test_for_macro\r\n")); return g_all; }
当 TEST_FLAG 被定义和未被定义时,将会出现运行结果。
其实这个是一个老生常谈的问题,关于编译器在对宏的处理情况。
如果堆栈数据空间地址被恶意或无意的修改,导致执行了不该执行或数据段的二进制值指令叫做溢出攻击的话;这类宏的情况,在某些情形下也属于宏攻击。