加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

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

发布时间:2021-03-16 05:49:54 所属栏目: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);
}

(编辑:PHP编程网 - 黄冈站长网)

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

    热点阅读