【发布时间】:2019-12-18 10:19:10
【问题描述】:
我正在尝试从头开始重新编码现有的 EXE,但无法确定 IMAGE_OPTIONAL_HEADER 结构元素“DataDirectory”的值。
它是 Pe32 标头的一部分。
我正在使用 NASM 和 WIN32N.INC 文件。
我知道 IMAGE_OPTIONAL_HEADER 结构元素“DataDirectory”的大小为 DQ。那是因为结构“DataDirectory”具有元素“VirtualAddress”和“isize”,它们都是DD。
STRUC IMAGE_DATA_DIRECTORY
.VirtualAddress RESD 1
.isize RESD 1
ENDSTRUC
STRUC IMAGE_OPTIONAL_HEADER
.Magic RESW 1
.MajorLinkerVersion RESB 1
.MinorLinkerVersion RESB 1
.SizeOfCode RESD 1
.SizeOfInitializedData RESD 1
.SizeOfUninitializedData RESD 1
.AddressOfEntryPoint RESD 1
.BaseOfCode RESD 1
.BaseOfData RESD 1
.ImageBase RESD 1
.SectionAlignment RESD 1
.FileAlignment RESD 1
.MajorOperatingSystemVersion RESW 1
.MinorOperatingSystemVersion RESW 1
.MajorImageVersion RESW 1
.MinorImageVersion RESW 1
.MajorSubsystemVersion RESW 1
.MinorSubsystemVersion RESW 1
.Reserved1 RESD 1
.SizeOfImage RESD 1
.SizeOfHeaders RESD 1
.CheckSum RESD 1
.Subsystem RESW 1
.DllCharacteristics RESW 1
.SizeOfStackReserve RESD 1
.SizeOfStackCommit RESD 1
.SizeOfHeapReserve RESD 1
.SizeOfHeapCommit RESD 1
.LoaderFlags RESD 1
.NumberOfRvaAndSizes RESD 1
.DataDirectory RESQ 1
ENDSTRUC
那么,DataDirectory 元素的确切值是多少?数据目录的数量远不止一个。如导出目录 RVA + 大小、导入目录 RVA + 大小等。
我是否只是将第一个虚拟地址的偏移量放在“VirtualAddress”中,并将其大小放在“isize”中?这是我的猜测,但我不确定。
【问题讨论】: