1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4// ===========================================================================
5// File: CEELOAD.H
6//
7
8// CEELOAD.H defines the class use to represent the PE file
9// ===========================================================================
10#ifndef CEELoad_H
11#define CEELoad_H
12
13class PELoader;
14
15//
16// Used to cache information about sections we're interested in (descr, callsig, il)
17//
18class SectionInfo
19{
20public:
21 BYTE * m_pSection; // pointer to the beginning of the section
22 DWORD m_dwSectionOffset; // RVA
23 DWORD m_dwSectionSize;
24
25 // init this class's member variables from the provided directory
26 void Init(PELoader *pPELoader, IMAGE_DATA_DIRECTORY *dir);
27
28 // returns whether this RVA is inside the section
29 BOOL InSection(DWORD dwRVA)
30 {
31 return (dwRVA >= m_dwSectionOffset) && (dwRVA < m_dwSectionOffset + m_dwSectionSize);
32 }
33};
34
35class PELoader {
36 protected:
37
38 HMODULE m_hMod;
39 HANDLE m_hFile;
40 HANDLE m_hMapFile;
41 BOOL m_bIsPE32;
42 size_t m_FileSize;
43 size_t m_FileSizeAligned;
44
45 union
46 {
47 PIMAGE_NT_HEADERS64 m_pNT64;
48 PIMAGE_NT_HEADERS32 m_pNT32;
49 };
50
51 public:
52 SectionInfo m_DescrSection;
53 SectionInfo m_CallSigSection;
54 SectionInfo m_ILSection;
55
56 PELoader();
57 ~PELoader();
58 BOOL open(const char* moduleNameIn);
59 BOOL open(const WCHAR* moduleNameIn);
60 BOOL open(HMODULE hMod);
61 BOOL getCOMHeader(IMAGE_COR20_HEADER **ppCorHeader);
62 BOOL getVAforRVA(DWORD rva,void **ppCorHeader);
63 void close();
64 void dump();
65 inline BOOL IsPE32() { return m_bIsPE32; };
66 inline PIMAGE_NT_HEADERS32 ntHeaders32() { return m_pNT32; };
67 inline PIMAGE_NT_HEADERS64 ntHeaders64() { return m_pNT64; };
68 inline PIMAGE_DOS_HEADER dosHeader() { return (PIMAGE_DOS_HEADER)m_hMod; };
69 inline PIMAGE_FILE_HEADER coffHeader() { return &(m_pNT32->FileHeader); };
70 inline DWORD Signature() { return m_pNT32->Signature; };
71 inline BYTE* base() { return (BYTE*) m_hMod; };
72 inline HMODULE getHModule() { return m_hMod; };
73 inline HANDLE getHFile() { return m_hFile; } ;
74};
75
76#endif // CEELoad_H
77