Posted on 2005-12-03 12:33
Tommy Liang 阅读(1664)
评论(0) 编辑 收藏 引用
/GS编译选项是检测改写返回地址的某些缓冲区溢出的编译选项,具体表现在
以下的代码里面:
0040B577
mov esi,esp0040B579 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了,
![](/Emoticons/shades_smile.gif)