VC6如何取消/GS编译选项

/GS编译选项是检测改写返回地址的某些缓冲区溢出的编译选项,具体表现在

以下的代码里面:

0040B577   mov         esi,esp
0040B579   lea         edx,[ebp-14h]
0040B57C   push        edx
0040B57D   call        dword ptr [__imp__LoadLibraryA@4 (00424138)]
0040B583   cmp         esi,esp
0040B585   call        __chkesp (004010c0)
0040B58A   mov         dword ptr [ebp-4],eax

为了学习关于缓冲区溢出编程的知识,我们得从简入难,因此要关闭这个选项。

VC6的project setting没有这个选项,/GS是VC7 用的

/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/OverFlow.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

嗯。。。?

查一查,看一看,原来是 /GZ 起作用.

我把 /GZ编译选项去掉就OK了,没有讨厌的call __chkesp了,

你可能感兴趣的:(VC6如何取消/GS编译选项)