首页
社区
课程
招聘
[求助][求助]一个程序看不懂 请大侠帮忙啊
发表于: 2009-11-17 22:12 4602

[求助][求助]一个程序看不懂 请大侠帮忙啊

2009-11-17 22:12
4602
在《加密与解密》392页有个程序 如下:
BOOL IsFileModified()
{
PIMAGE_DOS_HEADER pDosHeader=NULL;
PIMAGE_NT_HEADERS pNtHeader=NULL;
//PIMAGE_NT_HEADERS 这个什么意思 是个数据类型吗?
DWORD fileSize,OriginalCRC32,NumberOfBytesRW;
TCHAR *pBuffer,szFileName[MAX_PATH];

GetModuleFileName(NULL,szFileName,MAX_PATH);//获得文件名
HANDLE hFile=CreateFile(szFileName,GENERIC_READ,1,NULL,3,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) return FALSE;

fileSize=GetFileSize(hFile,NULL);//获得文件长度
if(fileSize=0xFFFFFFFF)return FALSE;
pBuffer=new TCHAR[fileSize];//怎么里面还有个new,[fileSize]什么意思
ReadFile(hFile,pBuffer,fileSize,&NumberOfBytesRW,NULL);
CloseHandle(hFile);//关闭文件
pDosHeader=(PIMAGE_DOS_HEADER)pBuffer;//这行呢
pNtHeader=(PIMAGE_NT_HEADERS)((DWORD)pDosHeader+pNtHeader->e_lfanew);
//定位到PE文件头前4个字节处,并读出储存在这里的CRC-32值
OriginalCRC32=*((DWORD*)((DOWRD)pNtHeader-4));//这个最恼人了 怎么还2个*
fileSize=fileSize-DOWRD(pDosHeader->e_lfanew);//将PE文件头前那部分数据去除
if(CRC32((BYTE*)(pBuffer+pDosHeader->e_lfanew),fileSize)==OriginalCRC32)
   return TRUE;
esle
   return FALSE;
}
不好意思  C没学好 请各位大哥大姐弟弟妹妹 帮帮忙啊 谢谢了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 140
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
1.PIMAGE_NT_HEADERS看pe文件的文档你就知道了
2.pBuffer=new TCHAR[fileSize];//怎么里面还有个new,[fileSize]什么意思
应该是c++的代码,开辟一个新的TCHAR数组空间,大小是fileSize,用pBuffer指向该空间
3.pDosHeader=(PIMAGE_DOS_HEADER)pBuffer;//这行呢
由于上面的ReadFile(hFile,pBuffer,fileSize,&NumberOfBytesRW,NULL);执行后pBuffer后得到一个地址值,这个同样请参考pe文件的文档
2009-11-17 22:22
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢 lafeng
不知你说的Pe 文件的文档那里下载?
2009-11-18 08:52
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
自己顶下
谁知道告诉下吧
baidu google实在查不到详细资料
2009-11-18 18:44
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
就在书里面啊??
PIMAGE_NT_HEADERS 结构体
pDosHeader=(PIMAGE_DOS_HEADER)pBuffer;//这行呢
我的理解是强制转换成PIMAGE_DOS_HEADER的指针类型吧?
2009-11-20 05:54
0
游客
登录 | 注册 方可回帖
返回
//