tommy

It's hard to tell the world we live in is either a reality or a dream
posts - 52, comments - 17, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

VC6如何取消/GS编译选项

Posted on 2005-12-03 12:33 Tommy Liang 阅读(1673) 评论(0)  编辑 收藏 引用
/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了,


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理