关于代码异常的问题

时间:2011-09-23 01:55:06

标签: c++ visual-studio-2008 exception release

环境:VS 2008,C ++

我的代码如下:

void HopeException(LPVOID nVerify) 
{   
     char *p = NULL; 
     p = (char *)nVerify;  
     delete []p; 
}

当我使用参数not-NULL调用函数“ HopeException ”时,如:

    HopeException(123);

然后我希望程序会抛出异常。

但是当我使用发布模式在 VS 2008 上编译代码时,程序运行良好。

我不知道为什么。任何人都可以帮我解决这个问题吗?

或者你有什么好主意用另一种方法实现这个功能吗?

修改:

我很抱歉,我想我之前发布了错误的代码。

实际上,我正在为我的软件做保护。 我的软件将获取DLL文件的CRC值,然后我的软件将检查CRC值,如下所示:

    unsigned int VerifyCRC = FF234322;
    unsinged int CRC = getCRC("Fun.dll");
    LPVOID lpResult = CRC & (~VerifyCRC);
    HopeException(lpResult);

所以根据下面的代码,如果破解者破解 Fun.dll 文件,执行将抛出异常。
这真的是我想要的。

3 个答案:

答案 0 :(得分:2)

Jell - C ++为你提供足够的绳索(很可能是你们大多数朋友)。

但为什么呢? ( - 假设它取决于你的朋友)。

答案 1 :(得分:0)

您将nVerify视为地址并将其分配给指针p,然后在该地址上调用delete[]。如果nVerify的值不是一个有效的地址,你可以得到未定义的行为,其中包括看起来“运行良好”的程序,主要是因为你在这个函数中没有做太多的事情。

你真的想做什么?

答案 2 :(得分:0)

该代码不应该用C ++编译;应该编译得最好的最接近的事情是:

void HopeException(int nVerify)
{
      char *p = NULL;
      p = (char *)nVerify;
      delete []p;
}

此代码将在VS 2010 Express上崩溃,因此我认为它也会在VS 2008中崩溃。如果您的目标是直接抛出调试器异常(在x86上),您可以使用

__asm int 3;

如果你的目标是进入调试器,你也可以使用

DebugBreak();