环境: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 文件,执行将抛出异常。
这真的是我想要的。
答案 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();