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 被定义和未被定义时,将会出现运行结果。
其实这个是一个老生常谈的问题,关于编译器在对宏的处理情况。
如果堆栈数据空间地址被恶意或无意的修改,导致执行了不该执行或数据段的二进制值指令叫做溢出攻击的话;这类宏的情况,在某些情形下也属于宏攻击。