如果您弄乱了文件扩展名,您如何区分可执行文件和 DLL?
他们似乎都有切入点和一切......
最佳答案
看 this article有关 Windows 上可移植可执行文件的良好解释。
然后查看有关 PE header 的部分。此外,其中的代码在 C 中显示了使用 Win32 打开和检查 PE 文件的方式。您要查找的此信息存储在 IMAGE_FILE_HEADER 中.具体在Characteristics
将包含标志 IMAGE_FILE_DLL 0x2000
的字段如果是dll。
这应该为您提供足够的信息来创建一个小实用程序,如果这是您正在寻找的文件,它可以确定一堆文件。
用于引用目的的最相关代码位,从上面的文章中复制并编辑以删除无关的细节/错误处理。
void DumpFile(LPWSTR filename)
{
HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
LPVOID lpFileBase = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 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);
}
关于dll - 如何判断文件是EXE还是DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309179/