22.4.2 函数 FuncB

《软件调试》的示例程序

22.4.2 函数 FuncB


icommander 2009-07-30, 10:15 上午

1.清单22-8 FuncB中的szTemp没有显式用'\0'结尾。于是第5行的printf可能显示更长的字符串。

2.用esp寻址在vc2008,gcc中不可见。但可以通过下面的方式手工来验证。

__declspec(naked) void FuncB(char* szPara)

{

      char szTemp[5]={0};      <-下断点,检查esp+4是否等于szPara

      strncpy(szTemp, szPara,sizeof(szTemp)-1);

}

Re: 22.4.2 函数 FuncB


格蠹老雷 2009-07-30, 22:49 下午
第一点的意见很好。
第二点主要是用来演示FPO的情况,书中以VC6的发布版本为例,使用VC2005编译发布版本也会使用FPO,如果VC2008下禁止了FPO,那么可以尝试在函数前增加:
#pragma optimize( "y", on )

Re: 22.4.2 函数 FuncB


icommander 2009-07-31, 09:13 上午
明白了,我又学了一招。一会试一下。

Powered by Community Server Powered by CnForums.Net