资源表
在程序设计中,总会设计一些数据。这些数据可能是源代码内部需要用到的常量,菜单选项、界面描述等;也可能是源代码外部的,比如程序的图标文件、北京音乐文件、配置文件等,以上这些数据统称为资源。按照程序与数据分离的设计思想,最理想的方案是单独为程序所需要的数据安排一节来存储-PE中的资源就是这么做的。
7.1资源分类
资源数据在PE里是最复杂的一种。其难度主要体现在对资源数据的遍历定位上,以及资源块的不易阅读性。因为即使通过信息定位方法找到了资源块,其内部结构还需要进一步解析。首先来看资源分类的历史。
刚开始资源类型方面,以为16个种类足以了,然而后来发现并不够,这类问题再之前很容易理解。就如千年虫问题...
程序中常用的六类资源包括:
位图资源、光标资源、图标资源、菜单资源、对话框资源、自定义资源。
7.1.1 位图、光标、图标资源
位图、光标和图标是标识程序用途、修饰程序的最简约的符号,一般对应ico、cur、ani和bmp文件内容。这三种资源最终都是基于图片文件。在对资源脚本文件进行定义时,通常使用文件名,最后由资源编译器rc.exe将像素数据读入,在转化为二进制格式存储在PE的资源表指向的位置。位图、光标、图标这三类资源在脚本文件中的定义格式如下:
7.1.2 菜单资源
菜单资源是大部分应用程序都具备的资源。在资源脚本文件中,菜单的定义格式如下所示:
菜单ID MENU [DISCARDABLE]
BEGIN
菜单项定义
......
END
7.1.3 对话框资源
对话框也是大部分程序具备的一种资源。弹出式对话框人性化地排列着文本框、说明文字和按钮等可视化控件,使复杂的计算机操作变得容易。语法如下:
对话框ID DIALOG[DISCARDABLE] x坐标,y坐标,宽度,高度[options]
BEGIN
子窗口控件1
子窗口控件2
......
END
对话框的可可选属性及描述: