如何判断文件是EXE还是DLL?

前端之家收集整理的这篇文章主要介绍了如何判断文件是EXE还是DLL?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果你的文件扩展名已经搞砸了,你怎么能告诉一个DLL可执行文件

他们似乎都有入口点和一切…

看看 this article在Windows上的便携式可执行文件的一个很好的解释.

然后再看一下关于PE头的部分.此外,代码在C中显示了使用Win32打开和检查PE文件方法.您正在查找的信息存储在IMAGE_FILE_HEADER中.具体在特性字段中,如果它是一个dll,它将包含标志IMAGE_FILE_DLL 0x2000.

这应该为您提供足够的信息来创建一个小型实用程序,以便确定一堆文件,如果这是您正在寻找的.

用于参考目的的最相关的代码段,从上面的文章复制并编辑以消除无关的细节/错误处理.

void DumpFile(LPWSTR filename)
{
    HANDLE hFile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

    HANDLE hFileMapping = CreateFileMapping(hFile,PAGE_READONLY,NULL);

    LPVOID lpFileBase = MapViewOfFile(hFileMapping,FILE_MAP_READ,0);    

    PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)lpFileBase;

    PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + (DWORD)pDosHeader->e_lfanew);

    if ((pNTHeader->FileHeader.Characteristics & IMAGE_FILE_DLL))
         printf("dll"); 
    if ((pNTHeader->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE))
         printf("exe"); 
    else 
         printf("????");

    UnmapViewOfFile(lpFileBase);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
}

猜你在找的Windows相关文章