今天犯了个严重的错误,ReafFile之后没有SetFilePointer,就WriteFile

int main(int argc, char* argv[])
{

	WSAData wsadata;
	WSAStartup(MAKEWORD(2,2),&wsadata);
	
	char file[MAX_PATH]="c:\\WebGame.dll";
	HANDLE hFile=CreateFile(file,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
	int filesize=GetFileSize(hFile,0);
	
	BYTE *a=(BYTE*)malloc(filesize);
	BYTE *b=a;
	DWORD NumberOfBytesRead;
	ReadFile(hFile,a,filesize,&NumberOfBytesRead,NULL);

	//这里读取完文件之后文件指针会移动到末尾,如果不把文件指针移动到开头的话,WriteFile会在文件末尾写入数据
	//SetFilePointer(hFile,0,0,FILE_BEGIN);	

	Decode((LPVOID)a,filesize,0x07e9);

	
	DWORD NumberOfBytesWritten;
	WriteFile(hFile,b,filesize,&NumberOfBytesWritten,NULL);

 

这段代码是读取一个加密的WebGame.dll(101kb大小),然后调用Decode函数解密,再把解密后的数据写回到WebGame.dll,跑完之后,发现WebGame.dll的大小是203kb,感觉非常奇怪,调试后发现解密的代码也是对啊,b地址处的代码也是正确的解密结果,为什么写进去就不对了呢?猛地灵光一现,忘记SetFilePiinter了啊,ReadFile之后文件指针已经从0移动到了filesize了,所以WriteFile的时候就会出错了。

posted @ 2012-08-13 02:19  shremie  阅读(1095)  评论(0)    收藏  举报