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