看看
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); }