
A.DOS STUB和DOS头
DOS插桩程序在大多数情况下由汇编器/编译器自动产生.通常它调用INT 21H服务9来显示上述字符串.可以通过IMAGE_DOS_HEADER结构来识别一个合法的DOS头.这个结构的头两个字节肯定是MZ.可通过该结构的e_lfanew成员来找到PE文件的开始标志.MS-DOS头部占据了PE文件的头64个字节.在微软的WINNT.H中可以找到其内容结构的描述. 在DOS STUB后是PE文件头(PE header).PE文件头是PE相关结构IMGAE_NT_HEADERS的简称,即NT映像头,存放PE整个文件信息发布的重要字段,包含了PE装载器用到的重要域.执行体在 *** 作系统中执行时,PE装载器将从DOS MZ头中找到PE头文件的起始偏移量e_lfanew,从而跳过DOS STUB直接定位真正的PE文件.它由3部分组成:
(1)PE文件标志(4H字节)
PE文件标志0x50450000即PE00,标志着NT映像头的开始,也是PE文件中与windows有关内容的开始.
(2)映像文件(14H字节)
是NT映像文件的主要部分,包含PE文件的基本信息
(3)可选映像头
包含PE文件的逻辑分布信息.
C.节表
节表其实是紧跟NT映像文件的一个结构数组.其成员数目由映像文件头结构NumberOFSectios域的值来决定.
D.节
PE文件的真正内容划分为块,称之为节.节的划分基于各组数据的共同属性.惟有节的属性设置决定了节的特性和功能.典型的windows NT应用程序可以具有9个节:.texr,.bss.rdata,.data,.rsrc,edata,idata,pdata,.debug
判断一个文件是否为PE文件
var //检测指定文件是否有效PE文件
PEDosHead: TImageDosHeader
PENTHead: TImageNtHeaders
m_file: integer
begin
Result := False
m_file := FileOpen(filename, fmOpenRead or fmShareDenyNone)//只读和其它任意
if m_File >0 then
try
FileSeek(m_file, 0, soFromBeginning)//将指针挪至文件头
FileRead(m_file, PEDosHead, SizeOf(PEDosHead))//读PEDosHead结构
FileSeek(m_file, PEDosHead._lfanew, soFromBeginning)//将指针挪至_lfanew
FileRead(m_file, PENTHead, SizeOf(PENTHead))//读PENTHead结构
finally
FileClose(m_file)
end
if (PENTHead.Signature = IMAGE_NT_SIGNATURE) then //检验文件头部第一个字的值是否等于 IMAGE_DOS_SIGNATURE
Result := True
end
pe文件结构图
1 下载ultralISO(软碟通)软件,并安装;2 到“msdn”网站下载原版windows系统镜像文件(ISO格式);
3 将U盘插好启动软碟通,打开刚下载的系统镜像文件,将其刻录到U盘中(U盘选择FAT32文件系统);
4到需要安装系统的电脑上,插好U盘;
5开机,使用启动设备选择菜单选择从U盘启动;开始安装系统。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)