PE文件格式(2)
2007-01-14 20:15:04 来源:WEB开发网bit15(IMAGE_SCN_MEM_FARDATA)置1,不确定。
bit17(IMAGE_SCN_MEM_PURGEABLE)置1,节的数据是可清除的。
bit18(IMAGE_SCN_MEM_LOCKED)置1,节不可以在内存内移动。
bit19(IMAGE_SCN_MEM_PRELOAD)置1,节必须在执行开始前调入。
Bits20to23指定对齐。一般是库文件的对象对齐。
bit24(IMAGE_SCN_LNK_NRELOC_OVFL)置1,节包含扩展的重定位。
bit25(IMAGE_SCN_MEM_DISCARDABLE)置1,进程开始后节的数据不再需要。
bit26(IMAGE_SCN_MEM_NOT_CACHED)置1,节的数据不得缓存。
bit27(IMAGE_SCN_MEM_NOT_PAGED)置1,节的数据不得交换出去。
bit28(IMAGE_SCN_MEM_SHARED)置1,节的数据在所有映象例程内共享,如DLL的初始化数据。
bit29(IMAGE_SCN_MEM_EXECUTE)置1,进程得到“执行”访问节内存。
bit30(IMAGE_SCN_MEM_READ)置1,进程得到“读出”访问节内存。
bit31(IMAGE_SCN_MEM_WRITE)置1,进程得到“写入”访问节内存。
在节头后面我们看到节自身,他们在文件内按照'FileAlignment'字节数对齐。即在可选头和每个节的后面将添加0。节按照他们的RVAs排序.当加载到RAM,节的对齐按照SectionAlignment。
例如:一个可选头在偏移量981处结束,文件对齐为512,第一个节起始于1024。你可以借助'PointerToRawData'或者'VirtualAddress'找到节,不必用对齐找节。(节头哪里去了?此段有问题!!)
+-------------------+
|DOS-stub |
+-------------------+
|file-header |
+-------------------+
|optionalheader |
|----------|
| |----------------+
|datadirectories | |
| | |
|(RVAstodirec- |-------------+ |
|toriesinsections)| | |
| |---------+ | |目录在节内的相对地址
| | | | |
+-------------------+ | | |
| |-----+ | | |
|sectionheaders | | | | |
|(RVAstosection |--+ | | | |节边界的相对地址
| borders) | | | | | |
+-------------------+<-+ | | | |
| | |<-+ | |
|sectiondata1 | | | |节数据
| | |<-----+ |
+-------------------+<----+ |
| | |
|sectiondata2 | |
| |<--------------+
+-------------------+
每个节都有一个节头,每个数据目录将指向一个节(几个数据目录可能指向同一个节),有的节可能没有数据目录指向它。
更多精彩
赞助商链接