社区
Windows SDK/API
帖子详情
在BCB中如何用程序判断一个文件是否时DLL或EXE?
ZQGet
2004-08-24 10:14:02
在BCB中如何用程序判断一个文件是否时DLL或EXE? 比如:xxx.scr等它就是Exe文件,但如何用程序来判断,谢谢?
...全文
259
16
打赏
收藏
在BCB中如何用程序判断一个文件是否时DLL或EXE?
在BCB中如何用程序判断一个文件是否时DLL或EXE? 比如:xxx.scr等它就是Exe文件,但如何用程序来判断,谢谢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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"
R106-1.0.4-EQ100-
bcb
99b74256a
- Channel9.
dll
:这是
一个
动态链接库
文件
,可能是某些特定应用
程序
或工具的组件,用于提供额外的功能或数据处理。 - spd_dump_interactive.
exe
、spd_dump.
exe
:这两个
文件
很可能用于从设备
中
导出信息(如固件信息、...
SPCOMM 控件安装及说明
1. 添加控件:在设计界面,从Component Palette
中
拖拽SPCOMM控件到Form上,此
时
Form上会出现
一个
名为TSPComm的新控件。 2. 设置属性:在Object Inspector
中
,你可以配置SPCOMM控件的各项属性,如ComPort(串口号)...
fastreport4.9 支持delphi 2010 自动安装
在“fr4d14.
exe
”这个
文件
中
,包含了FastReport 4.9针对Delphi 2010的自动安装
程序
。用户只需运行此执行
文件
,按照向导提示操作,就可以将FastReport的相关组件添加到Delphi 2010的工具箱
中
,以便在IDE内直接拖放...
第9章__Win32编程
此外,还有许多其他重要的API函数分布在Windows或Windows\System (Winnt\System32)目录下的其他
DLL
文件
中
。 **使用场景**: 对于大多数日常开发任务,现代IDE如Borland C++ Builder (
BCB
) 提供了VCL组件库,这些组件...
例说
Exe
程序
作为
DLL
进行加载
t=68730例说
Exe
程序
作为
DLL
进行加载调用第三方
exe
程序
里面的函数,一直是大家所向往并已经讨论过不少的问题,其方法大体有三类:1、让第三方
exe
启动,然后自己
程序
注入进去调用之;2、让第三方
exe
启动,然后远程读入...
Windows SDK/API
1,222
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章