PE文件结构(二) 区块,文件偏移与RVA转换
来源:互联网 发布:开淘宝c店 编辑:程序博客网 时间:2024/05/01 05:04
PE文件结构(二)
参考
书:《加密与解密》
视频:小甲鱼 解密系列 视频
区块
在区块表 后面的就是一个一个区块,每个区块占用对齐值的整数倍,一般的文件都有代码块 跟 数据块( 它们的名字一般为.text 跟 .data 但这是可以修改的)。每个区块的数据具有相同的属性。编译器先在obj中生成不同的区块, 链接器再按照一定的规则合并不同obj跟库中的快。例如每个obj中肯定有.text 块, 连接器就会把它们合并成一个单一的.text 块;再如,如果两个区块具有相同的的属性就有可能被合并成一个块。
文件偏移与RVA转换
因为磁盘对齐跟内存对齐可能不同。还有每个块必须是对齐值的整数倍即在磁盘中可执行文件的每个块的大小是磁盘对齐值的整数倍,程序加载到内存中后块的大小是内存对齐值的整数倍。会导致文件偏移与RVA转换的不同,需要转换。
例子:转换输入表的RVA与文件偏移
通过查看可执行文件的二进制可以找到输入表的RVA,但是不能找到输入表的文件偏移。
先查看这个可执行文件的二进制,可以发现这个程序的磁盘对齐为200h内存对齐为1000h(IMAGE_OPTIONAL_HEADER中的SectionAlignment跟FileAlignment)
图片1
用LoadPE可以方便的得到:
图片2
再从可执行文件的二进制找到输入表的RVA(IMAGE_OPTIONAL_HEADER中的DataDirectory[1]就是输入表的信息)
图片3
也可以通过LoadPE方便的查看(点击目录,查看输入表的RVA):
图片4
转化文件偏移与RVA,通过上面的信息还不够,还需要每个区块在文件中跟在内存中的起始地址,可以用LoadPE方便的查看(点击 区段 即可):
图片5
输入表的RVA为204Ch,可以通过区段表知道,它在 .rdata 区段中,它相对 .rdata 头 的值为 4Ch。.rdata 断在磁盘中开始 的 文件偏移值为A00h,
用4Ch 加 A00h 即可得到输入表的文件偏移为A4Ch,通过LoadPE的“位置计算器” 可验证输入表的文件偏移值确实是A4Ch。
图片6
- PE文件结构(二) 区块,文件偏移与RVA转换
- PE文件中, RVA和文件偏移的转换
- 内存偏移(RVA)与文件偏移(offset)相互转换
- PE文件的相对虚拟地址(RVA)和文件偏移地址(FOA)的转换
- [PE文件结构学习]1.相对虚拟地址(RVA)与物理地址的转换
- 理解PE文件相对虚拟地址(RVA)到文件偏移的转换
- PE文件关于虚拟相对地址RVA与基于文件的偏移地址关系
- PE内存偏移与文件偏移相互转换
- PE文件详解(三)--区块描述、对齐值以及RVA
- PE文件详解四:PE详解之区块描述、对齐值以及RVA详解
- PE文件RVA-VA-Offset
- PE文件中RVA和Offset的转换
- 【逆向】PE文件的基本结构(3)--节表和RVA换算
- PE文件结构(二)
- PE文件结构(PE文件头二)
- 内存偏移与文件偏移相互转换
- PE文件结构详解<二>
- PE文件的基本结构-3 节表和RVA换算
- Java内存泄露及其发生场景
- 解决:java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldExcepti
- *数组名(数组元素) 与*数组名(指针数组中的数组名)
- 黑马程序员——C语言数据类型总结
- mybatis 根据数组批量删除
- PE文件结构(二) 区块,文件偏移与RVA转换
- CryptGenRandom windows下生成随机数的函数使用
- Mysql安全基础篇学习笔记
- 黑马程序员——C语言进制和字符串
- mybatis表关联查询
- 《魔鬼搭讪学》读书笔记
- switch语句格式
- 采用Spring注解方式, 实现事务
- 关于break语句与goto语句的区分