1 /** @file
2   Provides a service to retrieve the PE/COFF entry point from a PE/COFF image.
3 
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 #ifndef __PE_COFF_GET_ENTRY_POINT_LIB_H__
10 #define __PE_COFF_GET_ENTRY_POINT_LIB_H__
11 
12 /**
13   Retrieves and returns a pointer to the entry point to a PE/COFF image that has been loaded
14   into system memory with the PE/COFF Loader Library functions.
15 
16   Retrieves the entry point to the PE/COFF image specified by Pe32Data and returns this entry
17   point in EntryPoint.  If the entry point could not be retrieved from the PE/COFF image, then
18   return RETURN_INVALID_PARAMETER.  Otherwise return RETURN_SUCCESS.
19   If Pe32Data is NULL, then ASSERT().
20   If EntryPoint is NULL, then ASSERT().
21 
22   @param  Pe32Data                  The pointer to the PE/COFF image that is loaded in system memory.
23   @param  EntryPoint                The pointer to entry point to the PE/COFF image to return.
24 
25   @retval RETURN_SUCCESS            EntryPoint was returned.
26   @retval RETURN_INVALID_PARAMETER  The entry point could not be found in the PE/COFF image.
27 
28 **/
29 RETURN_STATUS
30 EFIAPI
31 PeCoffLoaderGetEntryPoint (
32   IN  VOID  *Pe32Data,
33   OUT VOID  **EntryPoint
34   );
35 
36 /**
37   Returns the machine type of a PE/COFF image.
38 
39   Returns the machine type from the PE/COFF image specified by Pe32Data.
40   If Pe32Data is NULL, then ASSERT().
41 
42   @param  Pe32Data   The pointer to the PE/COFF image that is loaded in system
43                      memory.
44 
45   @return Machine type or zero if not a valid image.
46 
47 **/
48 UINT16
49 EFIAPI
50 PeCoffLoaderGetMachineType (
51   IN VOID  *Pe32Data
52   );
53 
54 /**
55   Returns a pointer to the PDB file name for a PE/COFF image that has been
56   loaded into system memory with the PE/COFF Loader Library functions.
57 
58   Returns the PDB file name for the PE/COFF image specified by Pe32Data.  If
59   the PE/COFF image specified by Pe32Data is not a valid, then NULL is
60   returned.  If the PE/COFF image specified by Pe32Data does not contain a
61   debug directory entry, then NULL is returned.  If the debug directory entry
62   in the PE/COFF image specified by Pe32Data does not contain a PDB file name,
63   then NULL is returned.
64   If Pe32Data is NULL, then ASSERT().
65 
66   @param  Pe32Data   The pointer to the PE/COFF image that is loaded in system
67                      memory.
68 
69   @return The PDB file name for the PE/COFF image specified by Pe32Data, or NULL
70           if it cannot be retrieved.
71 
72 **/
73 VOID *
74 EFIAPI
75 PeCoffLoaderGetPdbPointer (
76   IN VOID  *Pe32Data
77   );
78 
79 
80 /**
81   Returns the size of the PE/COFF headers
82 
83   Returns the size of the PE/COFF header specified by Pe32Data.
84   If Pe32Data is NULL, then ASSERT().
85 
86   @param  Pe32Data   The pointer to the PE/COFF image that is loaded in system
87                      memory.
88 
89   @return Size of PE/COFF header in bytes, or zero if not a valid image.
90 
91 **/
92 UINT32
93 EFIAPI
94 PeCoffGetSizeOfHeaders (
95   IN VOID     *Pe32Data
96   );
97 
98 /**
99   Returns PE/COFF image base specified by the address in this PE/COFF image.
100 
101   On DEBUG build, searches the PE/COFF image base forward the address in this
102   PE/COFF image and returns it.
103 
104   @param  Address    Address located in one PE/COFF image.
105 
106   @retval 0          RELEASE build or cannot find the PE/COFF image base.
107   @retval others     PE/COFF image base found.
108 
109 **/
110 UINTN
111 EFIAPI
112 PeCoffSearchImageBase (
113   IN UINTN    Address
114   );
115 
116 #endif
117