Line 18... |
Line 18... |
|
|
class LinkableObject {
|
class LinkableObject {
|
public:
|
public:
|
typedef unsigned char Byte;
|
typedef unsigned char Byte;
|
typedef std::uint32_t Word;
|
typedef std::uint32_t Word;
|
|
typedef std::int_least64_t Integer;
|
|
|
|
enum SymbolType {Unknown,Local,Exported,Imported};
|
|
enum RefType {Regular,Short};
|
|
|
enum SymbolType {Unknown,Local,External};
|
|
struct Reference {
|
struct Reference {
|
std::string source;
|
std::string source;
|
int line;
|
int line;
|
Word rva;
|
Word rva;
|
|
Integer offset;
|
|
RefType type;
|
};
|
};
|
struct SymbolData {
|
struct SymbolData {
|
SymbolType type=Unknown;
|
SymbolType type=Unknown;
|
Word rva;
|
Word rva;
|
std::vector<Reference> refs;
|
std::vector<Reference> refs;
|
};
|
};
|
|
|
typedef std::map<std::string,SymbolData> SymbolTable;
|
typedef std::map<std::string,SymbolData> SymbolTable;
|
|
|
private:
|
private:
|
std::string _name;
|
std::string _name;
|
std::vector<Byte> _code;
|
std::vector<Byte> _code;
|
Line 59... |
Line 65... |
Word addPadding(std::size_t size=sizeof(LinkableObject::Word));
|
Word addPadding(std::size_t size=sizeof(LinkableObject::Word));
|
|
|
Word getWord(Word rva) const;
|
Word getWord(Word rva) const;
|
void replaceWord(Word rva,Word value);
|
void replaceWord(Word rva,Word value);
|
|
|
void addLocalSymbol(const std::string &name,Word rva);
|
void addSymbol(const std::string &name,Word rva);
|
void addExternalSymbol(const std::string &name);
|
void addImportedSymbol(const std::string &name);
|
void addReference(const std::string &symbolName,const std::string &source,int line,Word rva);
|
void exportSymbol(const std::string &name);
|
|
void addReference(const std::string &symbolName,const Reference &ref);
|
|
|
SymbolData &symbol(const std::string &name);
|
SymbolData &symbol(const std::string &name);
|
const SymbolData &symbol(const std::string &name) const;
|
const SymbolData &symbol(const std::string &name) const;
|
const SymbolTable &symbols() const;
|
const SymbolTable &symbols() const;
|
|
|