PE知识复习之PE的节表
PE知识复习之PE的节表
一丶节表信息,PE两种状态.以及重要两个成员解析.
确定节表位置: DOS + NT头下面就是节表.
确定节表数量: 节表数量在文件头中存放着.可以准确知道节表有多少个.
节表是一个结构体数组.没一个节表表示了数据在哪,怎么存储.
下方是节的结构体
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //8个字节名字.自己可以起.编译器也可以给定.不重要.
union {
DWORD PhysicalAddress;
DWORD VirtualSize; //节数据没有对齐后的大小.也就是没有对齐.节数据有多大.
} Misc;
DWORD VirtualAddress; //加载到内存中的第一个字节的地址.也就是虚拟地址.节在内存中哪里开始.内存中的VA + ImageBase 才是真正的节开始位置
DWORD SizeOfRawData; //节在文件中对齐后的属性.跟是可选头中文件对齐的整数倍. sizeofRawData /文件对齐==0
DWORD PointerToRawData; //在文件中的偏移.是文件对齐成员倍数.
DWORD PointerToRelocations; //一下都是调试相关.
DWORD PointerToLinenumbers; //
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics; //节的属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
节表重要成员都标红了.我们知道.PE文件有两种状态.一种是内存状态.一种则是文件状态.
而节就是分别保存了内存中节展开的位置偏移. 以及文件展开后.节数据在文件中的那个偏移位置.
1.内存中节开始的位置
我们分别以PE两种状态.来加深一下.在内存中跟文件中节数据起始位置.
VirtualAddress 是内存中节展开的起始地址.我们可以随便打开一个文件.查看内存中起始位置值是多少.

随便打开一个文件看一下节表.可以得出.内存中偏移位置是0x1000位置.文件中节数据的位置是0x400. 偏移+ImageBase就是内存中开始的位置.我们看一下.

可以看到机器码为: 40 30 40 00 90 ..... 那么我们去文件中看一下,看一下节数据是否相同.
2.文件中节开始的位置

根据上方我们观看节表.得出在文件中的偏移是0x400位置.所以跳转到文件偏移处.发现节数据跟内存的数据是一样的.
这也解释了PE在内存中展开跟在文件中是不一样的.
也加深了节表中 VirtualAddress成员 以及 PointerToRawData成员了.
值得一说节表的大小是 0x28个字节.也就是两行半
观看一行半可以得出节名称.节在内存中的偏移. 以及节数据在文件中的偏移.
二丶节成员解析
根据上方节中两个重要成员我们明白了其意思.那么我们看看其他成员.
联合体中的成员.
联合体中的成员我们一般看第二个.
union {
DWORD PhysicalAddress;
DWORD VirtualSize; //节数据没有对齐后的大小.也就是没有对齐.节数据有多大.
} Misc;
VirtualSize 虚拟大小.指的就是节数据没有对齐后的大小.
换句话说就是节的数据真实大小. 但是注意,如果此成员大于SizeofRawData.那么就填0.因为实际大小数据.不可能大于对齐后的大小.
SizeOfRawData 这个成员则是对齐后的大小.比如我们节数据大小是0x1FFC 那么对齐后的大小就是0x2000 就是按照对齐之后进行存放的.对齐是按照文件对齐进行对齐的.
根据文件对齐后的大小.那么我们就能确定一个节数据到底由多大.
文件中开始的位置已经有了.然后对齐后的大小也已经有了. 文件开始位置是0x400.对齐后的数据有0x2000.那么节数据大小就是从0x400开始.占0x2000大小.那么结束位置就是0x2400位置.
节的属性.也就是最后一个成员.表明了这个节是可读的可写的.还是可读可写可执行. 具体可以查看一下宏.
三丶总结
总结来说节表中重要成员有三个.
1.内存中起始位置
2.节数据对齐后大小
3.文件中起始位置.
根据第二个成员和第三个成员可以得出节数据从哪里结束. 计算公式 节起始位置+节数据对齐后大小 = 节结束位置.
节属性也很重要. 这个需要查询.所以一定牢记.
PE知识复习之PE的节表的更多相关文章
- PE知识复习之PE的重定位表
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思. 如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234. 如果Im ...
- PE知识复习之PE的导入表
PE知识复习之PE的导入表 一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数 函数的地址 函数名称 序号 等等. 一个进程是一组PE文件构成的. PE文件需要依赖那些 ...
- PE知识复习之PE合并节
PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例 ...
- PE知识复习之PE新增节
PE知识复习之PE新增节 一丶为什么新增节.以及新增节的步骤 例如前几讲.我们的PE文件在空白区可以添加代码.但是这样是由一个弊端的.因为你的空白区节属性可能是只读的不能执行.如果你修改了属性.那么程 ...
- PE知识复习之PE的绑定导入表
PE知识复习之PE的绑定导入表 一丶简介 根据前几讲,我们已经熟悉了导入表结构.但是如果大家尝试过打印导入表的结构. INT IAT的时候. 会出现问题. PE在加载前 INT IAT表都指向一个名称 ...
- PE知识复习之PE的导出表
PE知识复习之PE的导出表 一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就 ...
- PE知识复习之PE扩大节
PE知识复习之PE扩大节 一丶为什么扩大节 上面我们讲了,空白区添加我们的代码.但是有的时候.我们的空白区不够了怎么办.所以需要进行扩大节. 扩大节其实很简单.修改节数据对齐后的大小即可. 并且在PE ...
- PE知识复习之PE的RVA与FOA的转换
PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...
- PE知识复习之PE的各种头属性解析
PE知识复习之PE的各种头属性解析 一丶DOS头结构体 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // M ...
随机推荐
- banner | what is the "banner" ?
banner/横幅 获取 banner(横幅) 信息属于信息搜集 因为在 banner 信息中,可以获取到软件开发商.软件名称.服务类型.版本号等 而版本号有时候就会存在公开的 CVE 问 ...
- iOS 获取app进程被杀死事件
程序被用户双击上滑杀死后,就对app做一些特殊的处理 下面的方法可以获取到用户双击上滑杀死的事件 - (void)applicationDidEnterBackground:(UIApplicatio ...
- 20181117-python第二章学习小结-part2
浮点型补充: 有限小数与无限循环小数,不包括无理数! 小数点后面的数据运算太复杂,精确度不及整数! 尽量使用科学计数表示小数 列表学习(语法) 创建:[] list = [] #创建空表 list ...
- 爬虫下载City Scape数据
爬虫下载City Scape数据 CityScape是道路场景的经典数据集,但是如right Img8bit_sequence_trainvaltest达到322G,需要用服务器下载比较方便. 需求场 ...
- Golang websocket推送
Golang websocket推送 在工作用主要使用的是Java,也做过IM(后端用的netty websocket).最近想通过Golang重写下,于是通过websocket撸了一个聊天室. 项目 ...
- javascript中的函数节流和函数去抖
带着问题去尝试 首先我们要知道为什么要用到函数节流和函数去抖?我们带着以下的疑问来进行分析! 1.比如搜索框,你会用到什么事件(change.blur.keyup等)?去做什么效果?2.再比如scro ...
- django+javascrpt+python实现私有云盘
代码稍后上,先整理下私有云盘的相关功能介绍. 1.登陆界面 2.首页展示,有个人目录.部门目录以及公司目录,针对不用的目录设置不同的权限控制. 3.个人信息展示 4.账号管理.账号信息展示 5.账号添 ...
- vue简单指令笔记
v-once 执行一次性插值,数据改变插值处内容不会更新 <span v-once>这个将不会改变: {{ msg }}</span> v-text 插入文本 <!--两 ...
- android利用ContentResolver访问者获取手机联系人信息
转载自:http://www.jb51.net/article/106379.htm 首先需要在AndroidManifest.xml文件中添加权限: <uses-permission andr ...
- Fragment中TabLayout加FragmentViewPager
让tablayout中的Tab平铺:在tablayout布局中写: app:tabMaxWidth="0dp"app:tabGravity="fill"app: ...