symbol_t is an abstraction upon the coff symbol. this allows for easier manipulation of the symbol. symbols can be different things, sections, functions, and even instructions (when functions are broken down).
More...
#include <symbol.hpp>
|
| symbol_t (coff::image_t *img, std::string name, std::uintptr_t offset, std::vector< std::uint8_t > data, coff::section_header_t *scn={}, coff::symbol_t *sym={}, std::vector< recomp::reloc_t > relocs={}, sym_type_t dcmp_type={}) |
| the explicit constructor of this symbol. More...
|
|
std::string | name () const |
| gets the name of the symbol. More...
|
|
std::uintptr_t | offset () const |
| gets the offset into the section where the symbol is located. More...
|
|
std::uintptr_t | allocated_at () const |
| returns the address where the symbol is allocated. More...
|
|
std::uint32_t | size () const |
| returns the size of the symbol. More...
|
|
coff::section_header_t * | scn () const |
| gets the section header of the section in which the symbol is contained. More...
|
|
coff::image_t * | img () const |
| gets the imagine in which the symbol is located inside of. More...
|
|
std::vector< std::uint8_t > & | data () |
| returns a vector by reference of bytes containing the data of the symbol. More...
|
|
coff::symbol_t * | sym () const |
| returns a pointer to the coff symbol object. More...
|
|
sym_type_t | type () const |
| returns the type of the symbol. More...
|
|
std::vector< recomp::reloc_t > & | relocs () |
| returns a vector of relocations. More...
|
|
void | allocated_at (std::uintptr_t allocated_at) |
| set the address where the symbol is allocated at. More...
|
|
std::size_t | hash () |
| gets the hash of the symbol name. More...
|
|
|
static std::size_t | hash (const std::string &sym) |
| generate a hash given the name of the symbol. More...
|
|
static std::string | name (const coff::image_t *img, coff::symbol_t *sym) |
| get the name of a symbol. this function will create a symbol name if the symbol is opaquely named. More...
|
|
symbol_t is an abstraction upon the coff symbol. this allows for easier manipulation of the symbol. symbols can be different things, sections, functions, and even instructions (when functions are broken down).
this class is used throughout theodosius and is a keystone of the project. ensure you understand how this class works and what it contains.
◆ symbol_t()
theo::decomp::symbol_t::symbol_t |
( |
coff::image_t * |
img, |
|
|
std::string |
name, |
|
|
std::uintptr_t |
offset, |
|
|
std::vector< std::uint8_t > |
data, |
|
|
coff::section_header_t * |
scn = {} , |
|
|
coff::symbol_t * |
sym = {} , |
|
|
std::vector< recomp::reloc_t > |
relocs = {} , |
|
|
sym_type_t |
dcmp_type = {} |
|
) |
| |
|
explicit |
the explicit constructor of this symbol.
- Parameters
-
img | the image in which the symbol is located in. |
name | the name of the symbol. |
offset | offset into the section where this symbol is located. |
data | the data of the symbol. there can be no data. |
scn | the section header describing the section which contains the symbol. |
sym | the coff symbol itself. |
relocs | a vector of relocations this symbol has (if any). |
dcmp_type | the type of symbol |
47 m_sym_type(dcmp_type),
coff::symbol_t * sym() const
returns a pointer to the coff symbol object.
Definition: symbol.cpp:92
coff::section_header_t * scn() const
gets the section header of the section in which the symbol is contained.
Definition: symbol.cpp:64
std::uintptr_t offset() const
gets the offset into the section where the symbol is located.
Definition: symbol.cpp:56
std::string name() const
gets the name of the symbol.
Definition: symbol.cpp:52
std::vector< std::uint8_t > & data()
returns a vector by reference of bytes containing the data of the symbol.
Definition: symbol.cpp:76
std::vector< recomp::reloc_t > & relocs()
returns a vector of relocations.
Definition: symbol.cpp:96
coff::image_t * img() const
gets the imagine in which the symbol is located inside of.
Definition: symbol.cpp:68
◆ allocated_at() [1/2]
std::uintptr_t theo::decomp::symbol_t::allocated_at |
( |
| ) |
const |
returns the address where the symbol is allocated.
- Returns
- the address where the symbol is allocated.
61 return m_allocated_at;
◆ allocated_at() [2/2]
void theo::decomp::symbol_t::allocated_at |
( |
std::uintptr_t |
allocated_at | ) |
|
set the address where the symbol is allocated at.
- Parameters
-
allocated_at | where the symbol is allocated at. |
std::uintptr_t allocated_at() const
returns the address where the symbol is allocated.
Definition: symbol.cpp:60
◆ data()
std::vector< std::uint8_t > & theo::decomp::symbol_t::data |
( |
| ) |
|
returns a vector by reference of bytes containing the data of the symbol.
- Returns
- a vector by reference of bytes containing the data of the symbol.
◆ hash() [1/2]
std::size_t theo::decomp::symbol_t::hash |
( |
| ) |
|
gets the hash of the symbol name.
- Returns
- the hash of the symbol name.
std::size_t hash()
gets the hash of the symbol name.
Definition: symbol.cpp:88
◆ hash() [2/2]
std::size_t theo::decomp::symbol_t::hash |
( |
const std::string & |
sym | ) |
|
|
static |
generate a hash given the name of the symbol.
- Parameters
-
sym | the symbol name to create a hash from. |
- Returns
- the symbol name hash
101 return std::hash<std::string>{}(
sym);
◆ img()
coff::image_t * theo::decomp::symbol_t::img |
( |
| ) |
const |
gets the imagine in which the symbol is located inside of.
- Returns
- the imagine in which the symbol is located inside of.
◆ name() [1/2]
std::string theo::decomp::symbol_t::name |
( |
| ) |
const |
gets the name of the symbol.
- Returns
- the name of the symbol.
◆ name() [2/2]
std::string theo::decomp::symbol_t::name |
( |
const coff::image_t * |
img, |
|
|
coff::symbol_t * |
sym |
|
) |
| |
|
static |
get the name of a symbol. this function will create a symbol name if the symbol is opaquely named.
for example in c++ if you define something like this:
some_struct_t val = { value_one, value_two };
"val" will be stored in the .data section of the coff file. however the symbol name will be opaque (the name of the symbol will be ".data"). this causes issues with theo since each symbol needs its own unqiue name to generate a unique symbol name hash. for symbols like this, theo will create a name for it with the following format:
.data::section_index!coff_file_timestamp+offset_into_section
- Parameters
-
img | the coff file containing the symbol. |
sym | the coff symbol itself. |
- Returns
- the name of the symbol, or a created one.
105 if (
sym->has_section() &&
106 sym->storage_class == coff::storage_class_id::private_symbol &&
107 sym->derived_type == coff::derived_type_id::none) {
108 auto scn =
img->get_section(
sym->section_index - 1);
109 auto res = std::string(
scn->name.to_string(
img->get_strings()).data())
111 .append(std::to_string(
sym->section_index))
113 .append(std::to_string(
img->file_header.timedate_stamp))
115 .append(std::to_string(
sym->value));
119 return std::string(
sym->name.to_string(
img->get_strings()));
◆ offset()
std::uintptr_t theo::decomp::symbol_t::offset |
( |
| ) |
const |
gets the offset into the section where the symbol is located.
- Returns
- the offset into the section where the symbol is located.
◆ relocs()
returns a vector of relocations.
- Returns
- a vector of relocations.
◆ scn()
coff::section_header_t * theo::decomp::symbol_t::scn |
( |
| ) |
const |
gets the section header of the section in which the symbol is contained.
- Returns
- the section header of the section in which the symbol is contained.
◆ size()
std::uint32_t theo::decomp::symbol_t::size |
( |
| ) |
const |
returns the size of the symbol.
- Returns
- the size of the symbol.
◆ sym()
coff::symbol_t * theo::decomp::symbol_t::sym |
( |
| ) |
const |
returns a pointer to the coff symbol object.
- Returns
- a pointer to the coff symbol object.
◆ type()
returns the type of the symbol.
- Returns
- the type of the symbol.
The documentation for this class was generated from the following files: