首页
社区
课程
招聘
诡异的BUG,new申请的内存自动消失
发表于: 2006-5-3 00:54 4171

诡异的BUG,new申请的内存自动消失

2006-5-3 00:54
4171
代码如下:
void DeCodePackages()
{
        int  i = 0;
        BYTE* p1;
        BYTE* p2;
        BYTE* p3;
        while ( Buf_Array[i] )
        {
                p1 = Buf_Array[i];
                if( *(p1+4) == 0x78 )
                {
                        p2 = new BYTE [ *(DWORD*)p1 + 20 ];
                        if ( p2 == 0 )
                        {
                                MessageBox(NULL,"Error",NULL,MB_OK);       
                        }
                        CopyMemory( p2, &Buf_DeCode[0], sizeof(Buf_DeCode) );
                        CopyMemory( (p2+8),p1,4 );
                        CopyMemory( p2+20 ,p1+4, *(DWORD*)p1 );
                        p3 =(BYTE*) DeCode( (DWORD)p2 );                //解密后的缓冲区没有释放
                        CopyMemory( p3+16,p3+8,4 );
                        p1 = new BYTE [ *(DWORD*)(p3+8) + 4 ];
                        if ( p1 == 0 )
                        {
                                MessageBox(NULL,"Error",NULL,MB_OK);       
                        }
                        CopyMemory(p1,p3+16,*(DWORD*)(p3+8) + 4);
                        delete [] Buf_Array[i];
                        Buf_Array[i] = p1;
                        delete [] p2;
                }

                i++;
        }
       
}
Buf_Array是指针数组,里面的成员都指向缓冲区,上面的函数的作用就是把密文包解密成明文。
我在这段函数起点或者终点处下断,一个一个观察,得到的结果是Buf_Array中的所有成员指向的缓冲区都没消失,而且程序继续运行也永远没有消失,因为我还没写明文处理代码。
如果我不下断,直接在数据窗口处观察Buf_Array中的有2-3个成员成员指向的缓冲区消失了,OD的提示就是:指定地址无内存。注意,在这里是缓冲区消失了,而不是Buf_Array中的那2-3个成员的值为0
这BUG也太诡异了,这不是永远都找不出了,因为我只要一下断它就消失,不下断它就出来

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
OK,我找到了,这应该是OD的BUG,我在窗口过程里加了段代码
if(wTemp == BTN_TEST)
                {
                        BYTE Temp;
                        int i = 0;
                        while ( Buf_Array[i] )
                        {
                                Temp = *Buf_Array[i];
                                i++;
                        }
                }
再用OD调试,发现内存又能显示出来了
2006-5-3 01:05
0
游客
登录 | 注册 方可回帖
返回
//