您当前位置: 首页 » 编码技巧 » win » 编码技巧 » C++中宏定义带来的潜在风险和问题

C++中宏定义带来的潜在风险和问题

2015-12-24 |

代码段如下:


#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 被定义和未被定义时,将会出现运行结果。

其实这个是一个老生常谈的问题,关于编译器在对宏的处理情况。

如果堆栈数据空间地址被恶意或无意的修改,导致执行了不该执行或数据段的二进制值指令叫做溢出攻击的话;这类宏的情况,在某些情形下也属于宏攻击。

分类:

win, 编码技巧

| 标签: