程序有access violation有关问题
程序有access violation问题
主函数
单步试调后发现
------解决方案--------------------
memcpy 拷贝时越界了
主函数
- 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");
------解决方案--------------------
memcpy 拷贝时越界了