读书人

程序有access violation有关问题

发布时间: 2012-04-27 11:57:44 作者: rapoo

程序有access violation问题
主函数

C/C++ code
int main(int argc,char *argv[]){    HANDLE   thread[2];    WCHAR    adaptername[8192];    WCHAR    *name1,*name2;    ULONG    adapterlength;    DWORD    threadsid,threadrid;    int      adapternum,open,i;        //system("cls.exe");/*       if(argc!=4)    {        usage();        return -1;    }*/    firstip=inet_addr("10.0.0.209");    secondip=inet_addr("10.0.1.254");    virtualip=inet_addr("10.0.1.28");/*    firstip=inet_addr(argv[1]);    secondip=inet_addr(argv[2]);    virtualip=inet_addr(argv[3]);*/    //获得物理地址   if(getmac()==FALSE)    {        return -1;    }        adapterlength=sizeof(adaptername);        if(PacketGetAdapterNames((char *)adaptername,&adapterlength)==FALSE)//获得网卡适配器名称    {        printf("PacketGetAdapterNames Error: %d\n",GetLastError());        return -1;    }        name1=adaptername;    name2=adaptername;    i=0;        while((*name1!='\0') || (*(name1-1)!='\0'))    {        if(*name1=='\0')        {            memcpy(adapterlist[i],name2,2*(name1-name2));            name2=name1+1;            i++;        }        name1++;    }        adapternum=i;    printf("Adapters Installed: \n");    for(i=0;i<adapternum;i++)    {        wprintf(L"%d - %s\n",i+1,adapterlist[i]);      }    do    {        printf("\nSelect the number of the adapter to open: ");        scanf("%d",&open);        if(open>=1 && open<=adapternum)            break;    }while(open<1 || open>adapternum);        lpadapter=PacketOpenAdapter(adapterlist[open-1]);    if(!lpadapter || (lpadapter->hFile==INVALID_HANDLE_VALUE))    {        printf("PacketOpenAdapter Error: %d\n",GetLastError());        return -1;    }        if((lppackets=PacketAllocatePacket())==FALSE)    {        printf("PacketAllocatePacket Send Error: %d\n",GetLastError());        return -1;    }        thread[0]=CreateThread(NULL,0,sniff,NULL,0,&threadrid);    if(thread[0]==NULL)    {        printf("CreateThread for sniffer Error: %d\n",GetLastError());        return -1;    }    thread[1]=CreateThread(NULL,0,arpspoof,NULL,0,&threadsid);    if(thread[1]==NULL)    {        printf("CreateThread for arpspoof Error: %d\n",GetLastError());        return -1;    }    WaitForMultipleObjects(2,thread,FALSE,INFINITE);        CloseHandle(thread[0]);             //关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。    CloseHandle(thread[1]);    PacketFreePacket(lppackets);        //释放_PACKET结构    PacketFreePacket(lppacketr);    PacketCloseAdapter(lpadapter);      //关闭网卡//关闭适配器        return 0;}


单步试调后发现
C/C++ code
adapternum=i;    printf("Adapters Installed: \n");
到这里出问题,name1、i、adapternum not found可是我都有定义,并没有清楚。而且i的值也显示成功赋给了adapternum。求大神指导~这个全代码是dns—id欺骗的。

[解决办法]
memcpy 拷贝时越界了

读书人网 >C语言

热点推荐