加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

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

发布时间:2021-03-15 19:33:00 所属栏目:Windows 来源:网络整理
导读:如果你的文件扩展名已经搞砸了,你怎么能告诉一个DLL可执行文件? 他们似乎都有入口点和一切… 看看 this article在Windows上的便携式可执行文件的一个很好的解释. 然后再看一下关于PE头的部分.此外,代码在C中显示了使用Win32打开和检查PE文件的方法.您正在

如果你的文件扩展名已经搞砸了,你怎么能告诉一个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);
}

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!