社区
Windows SDK/API
帖子详情
在BCB中如何用程序判断一个文件是否时DLL或EXE?
ZQGet
2004-08-24 10:14:02
在BCB中如何用程序判断一个文件是否时DLL或EXE? 比如:xxx.scr等它就是Exe文件,但如何用程序来判断,谢谢?
...全文
256
16
打赏
收藏
在BCB中如何用程序判断一个文件是否时DLL或EXE?
在BCB中如何用程序判断一个文件是否时DLL或EXE? 比如:xxx.scr等它就是Exe文件,但如何用程序来判断,谢谢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ZQGet
2004-12-24
打赏
举报
回复
谢谢,问题已基本解决,同时我也学习了一下关于PE文件格式的知识
wenyongjie
2004-10-26
打赏
举报
回复
看头文件
纪俊
2004-10-04
打赏
举报
回复
利用上边的结构就可以完成你的目的了
如果还有问题,你可以再搜索一下有关“验证PE文件”头的相关内容
纪俊
2004-10-04
打赏
举报
回复
、 PE文件被执行,PE装载器检查 DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header。
2、PE装载器检查 PE header 的有效性。如果有效,就跳转到PE header的尾部。
3、紧跟 PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。
4、PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分。
上述步骤是一些前辈分析的结果简述。
2、PE文件头概述
我们可以在winnt.h这个文件中找到关于PE文件头的定义:
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;
//PE文件头标志 :“PE\0\0”。在开始DOS header的偏移3CH处所指向的地址开始
IMAGE_FILE_HEADER FileHeader; //PE文件物理分布的信息
IMAGE_OPTIONAL_HEADER32 OptionalHeader; //PE文件逻辑分布的信息
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
typedef struct _IMAGE_FILE_HEADER {
WORD Machine; //该文件运行所需要的CPU,对于Intel平台是14Ch
WORD NumberOfSections; //文件的节数目
DWORD TimeDateStamp; //文件创建日期和时间
DWORD PointerToSymbolTable; //用于调试
DWORD NumberOfSymbols; //符号表中符号个数
WORD SizeOfOptionalHeader; //OptionalHeader 结构大小
WORD Characteristics; //文件信息标记,区分文件是exe还是dll
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
typedef struct _IMAGE_OPTIONAL_HEADER {
WORD Magic; //标志字(总是010bh)
BYTE MajorLinkerVersion; //连接器版本号
BYTE MinorLinkerVersion; //
DWORD SizeOfCode; //代码段大小
DWORD SizeOfInitializedData; //已初始化数据块大小
DWORD SizeOfUninitializedData; //未初始化数据块大小
DWORD AddressOfEntryPoint; //PE装载器准备运行的PE文件的第一个指令的RVA,若要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。(许多文章都有介绍RVA,请去了解)
DWORD BaseOfCode; //代码段起始RVA
DWORD BaseOfData; //数据段起始RVA
DWORD ImageBase; //PE文件的装载地址
DWORD SectionAlignment; //块对齐
DWORD FileAlignment; //文件块对齐
WORD MajorOperatingSystemVersion;//所需操作系统版本号
WORD MinorOperatingSystemVersion;//
WORD MajorImageVersion; //用户自定义版本号
WORD MinorImageVersion; //
WORD MajorSubsystemVersion; //win32子系统版本。若PE文件是专门为Win32设计的
WORD MinorSubsystemVersion; //该子系统版本必定是4.0否则对话框不会有3维立体感
DWORD Win32VersionValue; //保留
DWORD SizeOfImage; //内存中整个PE映像体的尺寸
DWORD SizeOfHeaders; //所有头+节表的大小
DWORD CheckSum; //校验和
WORD Subsystem; //NT用来识别PE文件属于哪个子系统
WORD DllCharacteristics; //
DWORD SizeOfStackReserve; //
DWORD SizeOfStackCommit; //
DWORD SizeOfHeapReserve; //
DWORD SizeOfHeapCommit; //
DWORD LoaderFlags; //
DWORD NumberOfRvaAndSizes; //
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
//IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress; //表的RVA地址
DWORD Size; //大小
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
PE文件头后是节表,在winnt.h下如下定义
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//节表名称,如“.text”
union {
DWORD PhysicalAddress; //物理地址
DWORD VirtualSize; //真实长度
} Misc;
DWORD VirtualAddress; //RVA
DWORD SizeOfRawData; //物理长度
DWORD PointerToRawData; //节基于文件的偏移量
DWORD PointerToRelocations; //重定位的偏移
DWORD PointerToLinenumbers; //行号表的偏移
WORD NumberOfRelocations; //重定位项数目
WORD NumberOfLinenumbers; //行号表的数目
DWORD Characteristics; //节属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
以上结构就是在winnt.h中关于PE文件头的定义,如何我们用C/C++来进行PE可执行文件操作,就要用到上面的所有结构,它详细的描述了PE文件头的结构。
纪俊
2004-10-04
打赏
举报
回复
还没解决么?
呵呵
binbin
2004-10-03
打赏
举报
回复
如果一个Exe也输出函数,LoadLibrary应该也能成功吧?
luokaikun
2004-09-25
打赏
举报
回复
参照PE文件格式
NowCan
2004-09-25
打赏
举报
回复
其实判断DLL还有一个办法,就是LoadLibrary一下,看看是否成功。
shangxingu
2004-09-11
打赏
举报
回复
用Tdump或Dumpbin
xjp6688
2004-09-11
打赏
举报
回复
www.pediy.com
CWYCN
2004-09-11
打赏
举报
回复
EXE文件和DLL文件都有特定的文件头标志,读文件内容进行相应的判断。
binbin
2004-09-09
打赏
举报
回复
exe文件也能象dll那样输出函数的.
wantsong
2004-09-09
打赏
举报
回复
同意楼上,参照文件格式
captainivy
2004-09-09
打赏
举报
回复
参照PE文件格式
MEFULEU
2004-08-24
打赏
举报
回复
shell隐藏运行一下,应该可以根据返回的参数判定;然后再强制停止即可
NowCan
2004-08-24
打赏
举报
回复
开头两个字节是"MZ"
例说
Exe
程序
作为
DLL
进行加载
t=68730例说
Exe
程序
作为
DLL
进行加载调用第三方
exe
程序
里面的函数,一直是大家所向往并已经讨论过不少的问题,其方法大体有三类:1、让第三方
exe
启动,然后自己
程序
注入进去调用之;2、让第三方
exe
启动,然后远程读入...
常用的
BCB
函数
CreateAction 函数 创建
一个
指定类型的Action,显示在action list editor
中
。 EnumRegisteredAction 过程 枚举已经注册的Action RegisterAction 过程 注册Action UnRegisterAction 过程 反注册Action ...
使用
BCB
制作控制面版
程序
(转)
使用
BCB
制作控制面版
程序
(转)[@more@]用
BCB
开发控制面板
程序
前不久,Inprise公司(原Borland公司)正式公布了Delphi 5.0版,其开发向导
中
支持了“控制面板
程序
(CPL)”框架的生成,利用它...
Iocomp组件在
BCB
中
的应用
最近做的项目
中
需要和OPCServer连接,而且是局域网内的连接,DCOM配置就不说了,我们只是...我先测试了一下拖拽
一个
ILabel到Form上,然后右键Edit,会看到有OPC的选项,我只是想把OPCServer的数据显示出来,所以我添
60个
BCB
(C++Build)初学者 应用实例
1.怎样在C++Builder
中
创建使用
DLL
2.用C++Bulider在WIN.INI
中
保存信息 3.如何在C++Builder
中
检测硬件 4.C++Builder如何响应消息及自定义消息 5.利用C++ Builder开发动画
DLL
6.用C++ Builder 3制作屏幕保护...
Windows SDK/API
1,221
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章