滴水PE知识点学习笔记

PE文件分为四部分:
DOS部分,多是历史遗留问题,并不重要;
DOS内一共有2个部分,第一个是MZ文件头,也就是拖入文件后显示的4D5A,大小一共64个字节;
第二部分是DOS Stub,也就是DOS块,他的大小不确定;如果是病毒程序,则可以在这里注入一些代码;

如何确定DOS块的大小:在MZ文件头结构体中,最后四个字节指向PE头的地址,PE头到结构体的距离就是DOS块的大小;

PE文件头;
第一部分是标志部分,一共四个字节,存储的是:P,E,0,0
第二部分是标准PE头,大小是20个字节;
第三部分是扩展PE头,32位的大小是224个字节;这个结构体的大小是可以扩展的;扩展的方法是在标准PE头中[扩展pe头大小]的成员中,修改大小;


节表;
节表占40个字节;所有数据都在节数据中存储,而节表确定了他们的各种属性;

节数据;

文件头大小(DOS,PE,节表部分)的大小,并不是将三个部分相加即可;在扩展PE头中有个属性:文件对齐(一般是200或者1000),牺牲空间获取时间,所以文件头的大小是文件对齐的整数倍;

从整数倍开始往后,就是节数据;
节数据,也完全按照文件对齐的属性来,按照文件对齐的整数倍分配空间;

PE文件在电脑中的两个状态;

在硬盘中,与在内存映像中;由于文件对齐的属性,每个单位中,后续的数据都是靠00来补足的;
比如文件头(也就是DOS头,PE文件头,节表相加)部分,以及每一块节数据:.text块,.rdata块,.data块等等;
这其中靠00填充的就是缝隙,这部分我们也是可以利用的;

在内存中,我们可以显然看见有大量的0作为填充;在扩展PE头中有一个与文件对齐一样的属性,就是内存对齐;这个属性基本是以1000之类的大数字作为单位,所以文件在内存中被拉伸了;

-----------------------------------------------------
DOS头部分属性分析:

DOS MZ文件头部分,本身是一个结构体 _IMAGE_DOS_HANDER;
大小是64个字节;
但是,DOS其实是给16位的机子用的,我们现在基本已经舍弃了DOSMZ部分的属性;
除了下面两个:

排在第一位的成员:WORD e_magic  MZ标志位
排在最后一位的成员: LONG e_lfanew;  指向PE结构体的指针

MZ标志位的更改会让系统直接无法识别这个文件是否是一个PE文件;
指针的修改,则需要你将PE文件头中的数据进行重新部署,让他能够正确识别到标准PE头中的PE标志位;

中间的数据不重要,随便改随便删,已经舍弃了,并不会影响运行;

DOS块也是如此,随便折腾,或者加入一些病毒或者代码;

-----------------------------------------------------

PE头部分的属性:

PE头本身是一个结构体  _IMAGE_NT_HEADERS

DWORD Signature  PE的标志,四个字节的:P,E,0,0;
IMAGE_FILE_HEADER FileHeader ;  扩展PE头;
IMAGE_OPTIONAL_HEADER32 OptionalHeader;   扩展PE头;

PE标志是绝对不能破坏的,否则文件会启动失败;

标准PE头的成员:

WORD Machine;  可以运行在什么样的CPU上;0则是可以在任何CPU上.也可以在这个标志上判断文件是32位的还是64位的;
64位对应的数字是:8664
WORD NumberOfSections; 表示节的数量
DWORD TimeDateStamp;   编译器填写的时间戳(与创建时间等东西无关);
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;

 

---------------------------------

扩展PE头中的属性十分多;

其中,64位和32位本质上并没有太大的差别,但是在字节分配上会有差距;我们学习还是以32位为主;

需要着重记住的属性有:

WORD Magic  如果是10B,则是32程序 如果是20B,则是64位程序 
DWORD AddressOfEntryPoint 程序入口 
DWORD ImageBase 内存镜像基址 
---上面两个属性一般搭配使用
PE文件在内存中在哪里展开,由imagebase成员决定 

内存镜像基址+程序入口数据 = 程序真正的入口
举例:内存镜像基址为  00 00 40 00 根据存储模式就是00400000;
入口为1D387  
那么真正的入口地址是0041D387;


DWORD SectionAlignment   内存对齐
DWORD FileAlignment  文件对齐
DWORD SizeOfImage    内存中整个PE文件映射的尺寸,必须是内存对齐的整数倍;
DWORD SizeOfHeaders  所有头+节表按照文件对齐后的大小,否则加载会出错;
DWORD checksum       校验和;一些系统文件有要求,判断文件是否被修改,一般只对极其重要的文件才会判断,比如系统关键DLL之类;如果我们要做小动作,这个值到时候一起改掉就行了;
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon是一款由德国MVTec公司开发的高级机器视觉软件,它提供了一系列强大的工具和技术,包括图像处理、特征检测、形状匹配和光学字符识别等功能。滴水算法(也称为“水填充”或“区域生长”)是Halcon中用于图像分割的一种方法,它的基本思想是将图像中的像素分为两类:前景和背景。这个过程从一个初始的种子像素开始,然后逐步扩展,将与已知前景相似的邻近像素标记为前景。 滴水算法的工作流程大致如下: 1. **种子选择**:首先选择一个或多个种子像素作为区域生长的起点。 2. **相似性判断**:检查每个像素与其邻居的像素值,比如颜色、灰度值等,如果满足预设的阈值,认为它们属于同一区域。 3. **区域扩展**:将当前像素添加到前景区域,并继续检查其周围的像素,直到没有符合条件的像素为止。 4. **迭代更新**:如果遇到边界像素(即没有相同像素的相邻位置),会检查边界像素的邻域,如果符合条件,边界也会被扩展。 5. **停止条件**:通常当没有新的像素可以加入时,或者达到预设的最大迭代次数,算法就会停止。 Halcon的滴水算法应用广泛,例如在物体检测、轮廓提取、缺陷检测等领域。使用该算法时,参数的选择对结果至关重要,如阈值、连接性和增长方向等。 如果你对Halcon的滴水算法有更深入的问题,比如如何设置参数、使用示例或者与其他图像处理算法的区别,都可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值