blob: 373b79a849226b92c886d61fb82752765f90940a [file] [log] [blame]
/*
* Copyright 2006 ProductiveMe Inc.
* Copyright 2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.pme.exe;
/**
* Date: Mar 31, 2006
* Time: 6:01:16 PM
*/
public class ImageOptionalHeader extends Bin.Structure {
public ImageOptionalHeader(ExeFormat format) {
super("Image Optional Header");
addMember( new Word( "Magic" ) );
addMember( new Byte( "MajorLinkerVersion"));
addMember( new Byte( "MinorLinkerVersion"));
addMember( new DWord( "SizeOfCode" ) );
addMember( new DWord( "SizeOfInitializedData" ) );
addMember( new DWord( "SizeOfUninitializedData" ) );
addMember( new DWord( "AddressOfEntryPoint" ) );
addMember( new DWord( "BaseOfCode" ) );
if (format == ExeFormat.X86) {
addMember( new DWord( "BaseOfData" ) );
addMember( new DWord( "ImageBase" ) );
}
else {
addMember(new LongLong("ImageBase"));
}
addMember( new DWord( "SectionAlignment" ) );
addMember( new DWord( "FileAlignment" ) );
addMember( new Word( "MajorOperatingSystemVersion" ) );
addMember( new Word( "MinorOperatingSystemVersion" ) );
addMember( new Word( "MajorImageVersion" ) );
addMember( new Word( "MinorImageVersion" ) );
addMember( new Word( "MajorSubsystemVersion" ) );
addMember( new Word( "MinorSubsystemVersion" ) );
addMember( new DWord( "Win32VersionValue" ) );
addMember( new DWord( "SizeOfImage" ) );
addMember( new DWord( "SizeOfHeaders" ) );
addMember( new DWord( "CheckSum" ) );
addMember( new Word( "Subsystem" ) );
addMember( new Word( "DllCharacteristics" ) );
if (format == ExeFormat.X86) {
addMember( new DWord( "SizeOfStackReserve" ) );
addMember( new DWord( "SizeOfStackCommit" ) );
addMember( new DWord( "SizeOfHeapReserve" ) );
addMember( new DWord( "SizeOfHeapCommit" ) );
}
else {
addMember( new LongLong( "SizeOfStackReserve" ) );
addMember( new LongLong( "SizeOfStackCommit" ) );
addMember( new LongLong( "SizeOfHeapReserve" ) );
addMember( new LongLong( "SizeOfHeapCommit" ) );
}
addMember( new DWord( "LoaderFlags" ) );
DWord numberOfRvaAndSizes = (DWord)addMember( new DWord( "NumberOfRvaAndSizes") );
ArrayOfBins<ImageDataDirectory> imageDataDirectories = new ArrayOfBins<ImageDataDirectory>("ImageDataDirectories", ImageDataDirectory.class, numberOfRvaAndSizes);
imageDataDirectories.setCountHolder( numberOfRvaAndSizes );
addMember( imageDataDirectories );
}
}