10 static constexpr size_t MaximumImageBytes = 1024 * 1024;
11 static constexpr size_t MaximumMappedBytes = 1024 * 1024;
12 static constexpr size_t MaximumSegments = 16;
13 static constexpr size_t MaximumSections = 256;
14 static constexpr size_t MaximumSymbols = 4096;
15 static constexpr size_t MaximumRelocations = 16384;
16 static constexpr size_t MaximumDependencies = 16;
17 static constexpr size_t MaximumLifecycleFunctions = 128;
18 static constexpr size_t NameBytes = 56;
19 static constexpr size_t SymbolNameBytes = 256;
21 enum class Result { Valid, Malformed, Unsupported, TooLarge };
30 Result preflight(
const uint8_t* image,
size_t length);
32 bool symbol(
size_t index,
Symbol& result,
bool dynamic =
true)
const;
33 const char* symbolName(
const Symbol& value,
bool dynamic =
true)
const;
34 bool findSymbol(
const char* name,
Symbol& result,
bool dynamic =
false)
const;
35 bool relocation(
size_t index,
Relocation& result)
const;
36 bool contains(uintptr_t address,
size_t length,
size_t flags = PF_R)
const;
37 bool fileOffset(uintptr_t address,
size_t length,
size_t& offset)
const;
38 bool localPointer(uintptr_t address, uintptr_t& target)
const;
39 bool validateMaterialized(uintptr_t base)
const;
40 bool exportedSymbol(
size_t index,
Symbol& result)
const;
44 Segment segments[MaximumSegments];
48 size_t relocationCount;
50 char dependencies[MaximumDependencies][NameBytes];
51 size_t dependencyCount;
52 char optionalDependencies[MaximumDependencies][NameBytes];
53 size_t optionalDependencyCount;
56 uintptr_t constructors[MaximumLifecycleFunctions];
57 size_t constructorCount;
58 uintptr_t destructors[MaximumLifecycleFunctions];
59 size_t destructorCount;
62 bool section(
size_t index,
Section& result)
const;
63 bool string(
size_t tableOffset,
size_t tableBytes,
size_t offset,
const char*& result,
64 size_t maximum)
const;
65 bool mappedString(uintptr_t address,
const char*& result,
size_t maximum)
const;
66 bool namedObject(
const char* name,
size_t size,
Symbol& result)
const;
67 bool dependenciesAt(
const char* symbolName,
char names[][NameBytes],
size_t& count,
69 bool lifecycle(
const char* startName,
const char* endName, uintptr_t* targets,
73 Result validateRelocations();
78 size_t sectionStrings;
79 size_t sectionStringBytes;
87 size_t fullSymbolBytes;
89 size_t fullStringBytes;
91 size_t relocationBytes;
92 uintptr_t symbolAddress;
93 uintptr_t stringAddress;
94 uintptr_t relocationAddress;
95 uintptr_t constructorAddress;
96 size_t constructorBytes;
97 uintptr_t destructorAddress;
98 size_t destructorBytes;