高级语言程序转换SHELLCODE时编码注意

来源:互联网 发布:白帝捏脸数据 编辑:程序博客网 时间:2024/05/29 11:30

使用VC写的DLL通过内存加载类,转成SHELLCODE,发现一个诡异的问题,程序直接运行操作与下载无任何问题,下载10G数据也不会出错。

但转成SHELLCODE后,诡异的问题,就出现了,不确定时间地点,出错。

经过3个多小时,每句代码排查,找出问题原因,使用了如下代码:

UINT ProcFileEnumWillDown(TCHAR * str_path)//枚举要下载的文件夹{CListDirectoryFile list;list.SearchFileAll(str_path);CMySocket sock;sock.m_socket=m_socket;for (int i=0;i<list.MyVectorFileName.size();i++){WIN32_FIND_DATA fd={0};HANDLE hFind = FindFirstFile(list.MyVectorFileName[i].c_str(), &fd);if (hFind==INVALID_HANDLE_VALUE){lstrcpy(fd.cFileName,_T("Failed to access files"));//获取文件信息失败时把错误信息返给用户}else{lstrcpy(fd.cFileName,list.MyVectorFileName[i].c_str());//因为是枚举所有文件,把文件全路径复制到WIN32_FIND_DATA结构中FindClose(hFind);}PACKET pkt={0};//注意这里!CopyMemory((void*)pkt.buf,(char*)&fd,sizeof(fd));SendPacket(&pkt);}        PACKET pkt={0};//注意这里!SendPacket(&pkt);return 1;}

看出猫腻吗?如果是编译的EXE,板钉的没任何问题,决对靠普,但在SHELLCODE中,就出问题了,SHELLCODE中要求,禁止引用任何全局变量常量,这里编译后就会出问题了,解决方法,直接合并成一个 PACKET pkt={0}问题得到解决。