关于代码异常的一个问题

A question about the code exception

本文关键字:一个 问题 异常 代码 于代码      更新时间:2023-10-16

Env: VS 2008, c++

我的代码如下:

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

当我调用函数"HopeException"与参数非null,如:

    HopeException(123);

那么我希望程序会抛出一个异常。

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

我不知道为什么。关于这个问题,有人能给我一个帮助吗?

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

编辑:

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

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

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

所以根据下面的代码,如果破解者破解了Fun.dll文件,执行程序将抛出异常。

Jell - c++给了你足够的绳子来吊死你自己(很可能是你的大多数朋友)。

但是为什么要这样做呢?(-假设这取决于你的朋友)

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

你到底想干什么?

这些代码不应该在c++中编译;最接近编译正常的代码是:

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

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

__asm int 3;

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

DebugBreak();