PE文件之资源讲解
资源是PE文件中非常重要的部分,几乎所有的PE文件中都包含资源,与导入表与导出表相比,资源的组织方式要复杂得多,要了解资源的话,重点在于了解资源整体上的组织结构。
我们知道,PE文件资源中的内容包括:光标、图标、位图、菜单等十几种标准的类型,除此之外,还可以使用自定义的类型,每种类型的资源中,可能存在多个资源项,这些资源项用不同的ID或者名称来分辨,在某个资源ID下,还可以同时存在不同代码页的版本。
PE文件中资源的组织方式
资源的组织方式
- 获取资源的位置
- 资源目录
- 资源数据入口
我们怎么获取资源的位置呢?
我们可以在IMAGE_OPTIONAL_HEADER32结构的数据目录字段中获取,数据目录中的第三个IMAGE_DATA_DIRECTORY结构便是资源的定义,从这个结构的VirtualAddress得到的就是资源块地址的RVA值。
什么是资源目录?
我们应该了解的是:不管是根目录,还是第二层,第三层目录,每个目录都是由一个IMAGE_RESOURCE_DIRECTORY结构与紧跟后面的数个IMAGE_RESOURCE_DIRECTORY_ENTRY结构组成,这两种结构一起构成了一个目录快。
IMAGE_RESOURCE_DIRECTORY的定义如下:
在这个结构中最重要的是最后两个字段,两者相加的结果就是IMAGE_RESOURCE_DIRECTORY_ENTRY的数量结果。
现在来介绍一下IMAGE_RESOURCE_ENTRY结构,每个这种结构描述了一个目录项,其定义如下:
当Name1字段作为ID使用时,是可以存放一个双字的。但是,当Name1字段作为字符串使用时,一个双字是远远不够的,这样的话,那么,我们就只有在这里定义一个字符串的指针了。针对这两种情况,我们怎么来定义呢?定义的方法是:使用该字段的最高位(第31位)来区分这两种情况。当第31位是0时,表示字段的值作为ID来使用;当第31位为1时,字段的低位作为字符串指针来使用。但由于资源名称字符串是使用Unicode来编码的,所用这个指针并不直接指向字符串,而是指向一个IMAGE_RESOURCE_DIR_STRING_U的结构,这个结构包含Unicode字符串的长度与字符串本身。IMAGE_RESOURCE_DIR_STRING_U的定义如下:
什么是资源数据入口呢?
IMAGE_RESOURCE_DATA_ENTRY结构描述了资源数据所处的位置和大小,换句话说就是:我们终于得到了某个资源的详细信息。这个结构就是资源数据的入口。
其定义如下:
PE文件之资源讲解的更多相关文章
- 浅析MSIL中间语言——PE文件结构篇
一.开篇 开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于 ...
- 深入学习PE文件(转)
PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DO ...
- 深入剖析PE文件
不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. ...
- PE文件详解(九)
本篇文章转载自小甲鱼的一篇日志,原文地址 我们知道,Windows 将程序的各种界面定义为资源,包括加速键(Accelerator).位图(Bitmap).光标(Cursor).对话框(Dialog ...
- PE文件详解二
本文转自小甲鱼的PE文件相关教程,原文传送门 咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! 接着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构 ...
- .NET的PE文件结构篇(转)
一.开篇 开篇我要讲述一个关于PE文件结构的文章,这篇文章动手能力比较强,希望大家能够动手进行操作,这边文章篇幅有可能会长一些,为了方便大家阅读我可以将其分为几个部分进行讲解,主要分为以下几个部分: ...
- PE文件学习系列三-PE头详解
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 最近比较忙 ...
- 【C#进阶系列】02 PE文件,程序集,托管模块,元数据——还是那个Hello world
好了,还是这张图,还是一样的Hello world. 因为本章其实很多都是讲一些命令行编译啊什么鬼的配置类的东西,要用的时候直接百度或者回头查书就可以了, 所以了解一下也就行了,也没有记录下来,接下来 ...
- PE文件结构部分解析以及输入的定位
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...
随机推荐
- UITableView去除空白cell上多余separator
具体的效果可以参考微信ios7版的UITableview 它最后一行cell的separator是顶到最左边的 首先设置tableFooterView _messageTableview.tableF ...
- VM虚拟机无法拖拽、粘贴、复制
VM无法从客户机拖放/复制文件到虚拟机的解决办法: 将这两项取消勾选,点击[确定].再次打开,勾选,点击[确定] 原因分析:可能是VM中默认是不支持该功能的,但是在配置窗体上确实默认打钩打上的. 依据 ...
- jQuery学习笔记(1)
设置和获取HTML,文本和值 val()方法: 1.单选框 <html xmlns="http://www.w3.org/1999/xhtml"> <head r ...
- 2016/09/21 java split用法
public String[] split(String regex) 默认limit为0 public String[] split(String regex, int limit) 当limit& ...
- 6.python字符串-内置方法列举
所谓内置方法,就是凡是字符串都能用的方法,这个方法在创建字符串的类中,下面是总结: 首先,我们要学习一个获取帮助的内置函数 help(对象) ,对象可以是一个我们创建出来的,也可以是创建对象的那个类, ...
- struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
<s:if>判断字符串的问题: 1.判断单个字符:<s:if test="#session.user.username=='c'"> 这样是从session ...
- 与谷歌测试工程师的对话 - from Google Testing Blog
Conversation with a Test Engineer by Alan Faulner Alan Faulner谷歌的一名测试工程师,他工作在DoubleClick Bid Manager ...
- char与 int 类型转化问题汇总
1.char变为int时高位符号扩展问题 int main() { char a = 0x9a; int util; util = (int)a; if(util > 0) printf(&qu ...
- Table ‘performance_schema.session_variables’ doesn’t exist
运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist 解决的方法是: 第一步:在管理员命令中输入: mysql_u ...
- iOS学习之Object-C语言类和对象
一.OC语言的特点:封装,继承,多态:包含一个运行时系统:类库丰富. 二.面向对象 1.概述 OOP(Object Oriented Programming)面向对象编程. ...