2024-05-15 13:15:55 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "UbaObjectFile.h"
|
|
|
|
|
|
|
|
|
|
namespace uba
|
|
|
|
|
{
|
2024-05-19 23:12:02 -04:00
|
|
|
|
2024-05-15 13:15:55 -04:00
|
|
|
class ObjectFileCoff : public ObjectFile
|
|
|
|
|
{
|
|
|
|
|
public:
|
2024-05-22 15:22:17 -04:00
|
|
|
ObjectFileCoff();
|
2024-05-15 13:15:55 -04:00
|
|
|
virtual bool Parse(Logger& logger, const tchar* filename) override;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
struct Info;
|
|
|
|
|
|
|
|
|
|
bool ParseExports();
|
|
|
|
|
template<typename SymbolType> void ParseImports();
|
|
|
|
|
|
2024-05-19 23:12:02 -04:00
|
|
|
virtual bool StripExports(Logger& logger, u8* newData, const UnorderedSymbols& allNeededImports, u32& outKeptExportCount) override;
|
2024-05-21 00:36:22 -04:00
|
|
|
virtual bool CreateExtraFile(Logger& logger, MemoryBlock& memoryBlock, const UnorderedSymbols& allNeededImports, const UnorderedSymbols& allSharedImports, const UnorderedExports& allSharedExports, bool includeExportsInFile) override;
|
2024-05-19 23:12:02 -04:00
|
|
|
|
2024-05-15 13:15:55 -04:00
|
|
|
template<typename SymbolType> void CalculateImports(Logger& logger, Vector<u32>& outImports);
|
|
|
|
|
template<typename SymbolType> void WriteImports(Logger& logger, u8* newData, Info& newInfo, const Vector<u32>& symbolsToAdd);
|
|
|
|
|
template<typename SymbolType> void RemoveSymbols(Logger& logger, u8* newData, Info& newInfo);
|
|
|
|
|
|
|
|
|
|
struct Info
|
|
|
|
|
{
|
|
|
|
|
u32 sectionsMemOffset = 0;
|
|
|
|
|
u32 sectionCount = 0;
|
|
|
|
|
u64 directiveSectionMemOffset = 0;
|
2024-05-19 23:12:02 -04:00
|
|
|
u32 stringTableMemPos = 0;
|
2024-05-15 13:15:55 -04:00
|
|
|
u32 symbolsMemPos = 0;
|
|
|
|
|
u32 symbolCount = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool m_isBigObj = false;
|
|
|
|
|
Info m_info;
|
|
|
|
|
|
|
|
|
|
UnorderedSymbols m_loopbacksToAdd;
|
|
|
|
|
UnorderedSymbols m_toRemove;
|
2024-05-15 23:43:53 -04:00
|
|
|
|
|
|
|
|
static UnorderedSymbols PotentiallyDuplicatedSymbols;
|
2024-05-22 15:22:17 -04:00
|
|
|
static UnorderedSymbols ExportsToKeep;
|
2024-05-15 13:15:55 -04:00
|
|
|
};
|
|
|
|
|
}
|