/* * ImageExportDirectory.java - This file is part of the Jakstab project. * Copyright 2007-2015 Johannes Kinder <jk@jakstab.org> * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, see <http://www.gnu.org/licenses/>. */ package org.jakstab.loader.pe; import org.jakstab.util.BinaryInputBuffer; /** * @author Johannes Kinder */ class ImageExportDirectory { public long Characteristics; // Not used. public long TimeDateStamp; // Number of seconds since 1/1/1970 GMT. int MajorVersion; // Not used. int MinorVersion; // Not used. long Name; // RVA of DLL name string long Base; // Starting ordinal of exports, usually 1 // RVA(ord) = EAT[ord - Base]; long NumberOfFunctions; // The number of entries in the EAT. Some entries may be 0. long NumberOfNames; // The number of entries in the Export Names Table (ENT). This // value will always be less than or equal to the NumberOf-Functions field. // It will be less when there are symbols exported by ordinal only. It can also // be less if there are numeric gaps in the assigned ordinals. This field is // also the size of the export ordinal table (below). long AddressOfFunctions; // RVA of EAT. long AddressOfNames; // RVA of ENT. long AddressOfNameOrdinals; // RVA of export ordinal table. public ImageExportDirectory(BinaryInputBuffer in) throws java.io.IOException { Characteristics = in.readDWORD(); TimeDateStamp = in.readDWORD(); MajorVersion = in.readWORD(); MinorVersion = in.readWORD(); Name = in.readDWORD(); Base = in.readDWORD(); NumberOfFunctions = in.readDWORD(); NumberOfNames = in.readDWORD(); AddressOfFunctions = in.readDWORD(); AddressOfNames = in.readDWORD(); AddressOfNameOrdinals = in.readDWORD(); } public void output() { System.out.println("Characteristics: 0x" + Long.toHexString(Characteristics)); System.out.println("TimeDateStamp: 0x" + Long.toHexString(TimeDateStamp)); System.out.println("MajorVersion: 0x" + Long.toHexString(MajorVersion)); System.out.println("MinorVersion: 0x" + Long.toHexString(MinorVersion)); System.out.println("Name: 0x" + Long.toHexString(Name)); System.out.println("Base: 0x" + Long.toHexString(Base)); System.out.println("NumberOfFunctions: 0x" + Long.toHexString(NumberOfFunctions)); System.out.println("NumberOfNames: 0x" + Long.toHexString(NumberOfNames)); System.out.println("AddressOfFunctions: 0x" + Long.toHexString(AddressOfFunctions)); System.out.println("AddressOfNames: 0x" + Long.toHexString(AddressOfNames)); System.out.println("AddressOfNameOrdinals: 0x" + Long.toHexString(AddressOfNameOrdinals)); } }