/*
 * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * 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, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 *
 */

package sun.jvm.hotspot.debugger.win32.coff;

Models the information stored in the export directory table. Ostensibly this is supposed to lie in the .edata section. However, experience has shown that this data does not appear to be present there, instead (likely -- not yet tested) showing up in the Export Table portion of the OptionalHeaderDataDirectories. (Some of the descriptions are taken directly from Microsoft's documentation and are copyrighted by Microsoft.)
/** Models the information stored in the export directory table. Ostensibly this is supposed to lie in the .edata section. However, experience has shown that this data does not appear to be present there, instead (likely -- not yet tested) showing up in the Export Table portion of the OptionalHeaderDataDirectories. (Some of the descriptions are taken directly from Microsoft's documentation and are copyrighted by Microsoft.) */
public interface ExportDirectoryTable {
A reserved field, set to zero for now.
/** A reserved field, set to zero for now. */
public int getExportFlags();
Time and date the export data was created.
/** Time and date the export data was created. */
public int getTimeDateStamp();
Major version number. The major/minor version number can be set by the user.
/** Major version number. The major/minor version number can be set by the user. */
public short getMajorVersion();
Minor version number.
/** Minor version number. */
public short getMinorVersion();
Address of the ASCII string containing the name of the DLL. Relative to image base. See getDLLName.
/** Address of the ASCII string containing the name of the DLL. Relative to image base. See {@link #getDLLName}. */
public int getNameRVA();
Convenience routine which returns the name of the DLL containing this export directory.
/** Convenience routine which returns the name of the DLL containing this export directory. */
public String getDLLName();
Starting ordinal number for exports in this image. This field specifies the starting ordinal number for the Export Address Table. Usually set to 1.
/** Starting ordinal number for exports in this image. This field specifies the starting ordinal number for the Export Address Table. Usually set to 1. */
public int getOrdinalBase();
Number of entries in the Export Address Table.
/** Number of entries in the Export Address Table. */
public int getNumberOfAddressTableEntries();
Number of entries in the Name Pointer Table (also the number of entries in the Ordinal Table).
/** Number of entries in the Name Pointer Table (also the number of entries in the Ordinal Table). */
public int getNumberOfNamePointers();
Address of the Export Address Table, relative to the image base.
/** Address of the Export Address Table, relative to the image base. */
public int getExportAddressTableRVA();
Address of the Export Name Pointer Table, relative to the image base. The table size is given by Number of Name Pointers.
/** Address of the Export Name Pointer Table, relative to the image base. The table size is given by Number of Name Pointers. */
public int getNamePointerTableRVA();
Address of the Ordinal Table, relative to the image base.
/** Address of the Ordinal Table, relative to the image base. */
public int getOrdinalTableRVA();
Returns the ith exported symbol (from 0..getNumberOfNamePointers - 1). These are arranged in sorted order to allow binary searches.
/** Returns the <I>i</I>th exported symbol (from 0..{@link #getNumberOfNamePointers} - 1). These are arranged in sorted order to allow binary searches. */
public String getExportName(int i);
Returns the ith entry (0..getNumberOfNamePointers in the Export Ordinal Table. This is used for looking up a given symbol's address in the Export Address Table; see getExportAddress.
/** Returns the <I>i</I>th entry (0..{@link #getNumberOfNamePointers} in the Export Ordinal Table. This is used for looking up a given symbol's address in the Export Address Table; see {@link #getExportAddress}. */
public short getExportOrdinal(int i);
Indicates whether the specified export address is really a forwarder, in which case the value is not an address but a string.
/** Indicates whether the specified export address is really a forwarder, in which case the value is not an address but a string. */
public boolean isExportAddressForwarder(short ordinal);
Get the forwarder name for the given ordinal. Must be called only if isExportAddressForwarder() returns true.
/** Get the forwarder name for the given ordinal. Must be called only if isExportAddressForwarder() returns true. */
public String getExportAddressForwarder(short ordinal);

Takes in an ordinal from the Export Ordinal Table (see getExportOrdinal). This ordinal is biased by getOrdinalBase; however, the subtraction described in the documentation is done internally for convenience. Returns an address that is in one of two formats. If the address specified is not within the export section (as defined by the address and length indicated in the Optional Header), the field is an Export RVA: an actual address in code or data. Otherwise, the field is a Forwarder RVA, which names a symbol in another DLL.

An Export RVA is the address of the exported symbol when loaded into memory, relative to the image base. For example, the address of an exported function.

A Forwarder RVA is a pointer to a null-terminated ASCII string in the export section, giving the DLL name and the name of the export (for example, "MYDLL.expfunc") or the DLL name and an export (for example, "MYDLL.#27").

NOTE: the value returned has been transformed from an RVA to a file pointer which can be added to the image base to find an absolute address for the symbol.

/** <P> Takes in an ordinal from the Export Ordinal Table (see {@link #getExportOrdinal}). This ordinal is biased by {@link #getOrdinalBase}; however, the subtraction described in the documentation is done internally for convenience. Returns an address that is in one of two formats. If the address specified is not within the export section (as defined by the address and length indicated in the Optional Header), the field is an Export RVA: an actual address in code or data. Otherwise, the field is a Forwarder RVA, which names a symbol in another DLL. </P> <P> An Export RVA is the address of the exported symbol when loaded into memory, relative to the image base. For example, the address of an exported function. </P> <P> A Forwarder RVA is a pointer to a null-terminated ASCII string in the export section, giving the DLL name and the name of the export (for example, "MYDLL.expfunc") or the DLL name and an export (for example, "MYDLL.#27"). </P> <P> NOTE: the value returned has been transformed from an RVA to a file pointer which can be added to the image base to find an absolute address for the symbol. </P> */
public int getExportAddress(short ordinal); }