求教,搞了一天还是不知道为什么
int main(int argc, char* argv[])
{
//打开文件
HANDLE hFile=CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("CreateFile Failed\n");
return 0;
}
//创建内存映射文件的内核对象
HANDLE hMap=CreateFileMapping(hFile,NULL,PAGE_READONLY,NULL,NULL,NULL);
if(hMap==INVALID_HANDLE_VALUE)
{
printf("CreateFileMapping Failed\n");
return 0;
}
//把文件映射入内存
LPVOID lpBase=MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);
if(lpBase==NULL)
{
printf("MapViewOfFile Failed\n");
return 0;
}
IMAGE_DOS_HEADER *dosHeader;
IMAGE_NT_HEADERS *ntHeader;
IMAGE_IMPORT_BY_NAME *ImportName;
//lpBase由MapViewOfFile函数返回
dosHeader=(IMAGE_DOS_HEADER*)lpBase;
//检测是否是有效的PE文件
if (dosHeader->e_magic!=IMAGE_DOS_SIGNATURE)
{
printf("This is not a windows file\n");
return 0;
}
首先说下,这些代码是我从书上光盘代码复制出来的,搜索网上也是这样的代码。但是我用VC打开或者自己创建把代码放进去,都无法运行起来。执行就直接返回INVALID_HANDLE_VALUE了。
上面的函数,CreateFile和MapViewOfFile都返回0结束,不能向下执行了。如果我强制把return注释掉,程序执行到if (dosHeader->e_magic!=IMAGE_DOS_SIGNATURE)这里崩溃。
调试模式运行的时候,也是执行到if (dosHeader->e_magic!=IMAGE_DOS_SIGNATURE)这里就提示Unhandled exception in **.exe:0xc0000005:Access Violation.