16#ifndef LIEF_MACHO_SYMBOL_H
17#define LIEF_MACHO_SYMBOL_H
21#include "LIEF/visibility.h"
23#include "LIEF/Abstract/Symbol.hpp"
25#include "LIEF/MachO/LoadCommand.hpp"
73 enum class TYPE : uint32_t{
82 static constexpr uint32_t TYPE_MASK = 0x0e;
86 Symbol(
const details::nlist_32& cmd);
87 Symbol(
const details::nlist_64& cmd);
91 void swap(
Symbol& other)
noexcept;
102 return TYPE(type_ & TYPE_MASK);
108 return numberof_sections_;
119 return export_info() !=
nullptr;
134 return binding_info() !=
nullptr;
140 return binding_info_;
144 return binding_info_;
152 return type() == TYPE::UNDEFINED;
175 void raw_type(uint8_t type) {
178 void numberof_sections(uint8_t nbsections) {
179 numberof_sections_ = nbsections;
181 void description(uint16_t desc) {
185 void accept(Visitor& visitor)
const override;
187 LIEF_API
friend std::ostream& operator<<(std::ostream& os,
const Symbol& symbol);
189 static const Symbol& indirect_abs();
190 static const Symbol& indirect_local();
193 Symbol(CATEGORY cat) :
196 void library(DylibCommand& library) {
197 this->library_ = &library;
201 uint8_t numberof_sections_ = 0;
202 uint16_t description_ = 0;
204 BindingInfo* binding_info_ =
nullptr;
205 ExportInfo* export_info_ =
nullptr;
207 DylibCommand* library_ =
nullptr;
209 ORIGIN origin_ = ORIGIN::UNKNOWN;
210 CATEGORY category_ = CATEGORY::NONE;
Class used to parse a single binary (i.e. non-FAT)
Definition BinaryParser.hpp:74
Class which represents a MachO binary.
Definition MachO/Binary.hpp:73
Class that provides an interface over a binding operation.
Definition BindingInfo.hpp:38
Class which represents a library dependency.
Definition DylibCommand.hpp:34
Class that provides an interface over the Dyld export info.
Definition ExportInfo.hpp:38
Class that represents a Symbol in a Mach-O file.
Definition MachO/Symbol.hpp:47
ORIGIN
Definition MachO/Symbol.hpp:66
uint8_t numberof_sections() const
It returns the number of sections in which this symbol can be found. If the symbol can't be found in ...
Definition MachO/Symbol.hpp:107
bool is_external() const
True if the symbol is defined as an external symbol.
Definition MachO/Symbol.hpp:151
const DylibCommand * library() const
Return the library in which the symbol is defined. It returns a null pointer if the library can't be ...
Definition MachO/Symbol.hpp:157
std::string demangled_name() const
Try to demangle the symbol or return an empty string if it is not possible.
CATEGORY
Category of the symbol when the symbol comes from the LC_SYMTAB command. The category is defined acco...
Definition MachO/Symbol.hpp:56
uint16_t description() const
Return information about the symbol (SYMBOL_DESCRIPTIONS)
Definition MachO/Symbol.hpp:112
TYPE
Definition MachO/Symbol.hpp:73
bool has_export_info() const
True if the symbol is associated with an ExportInfo This value is set when the symbol comes from the ...
Definition MachO/Symbol.hpp:118
ORIGIN origin() const
Return the origin of the symbol: from LC_SYMTAB command or from the Dyld information.
Definition MachO/Symbol.hpp:166
uint8_t raw_type() const
Raw value of nlist_xx.n_type
Definition MachO/Symbol.hpp:96
CATEGORY category() const
Category of the symbol according to the LC_DYSYMTAB command.
Definition MachO/Symbol.hpp:171
const ExportInfo * export_info() const
Return the ExportInfo associated with this symbol (or nullptr if not present)
Definition MachO/Symbol.hpp:124
const BindingInfo * binding_info() const
Return the BindingInfo associated with this symbol (or nullptr if not present)
Definition MachO/Symbol.hpp:139
bool has_binding_info() const
True if the symbol is associated with a BindingInfo This value is set when the symbol comes from the ...
Definition MachO/Symbol.hpp:133
TYPE type() const
Type as defined by nlist_xx.n_type & N_TYPE
Definition MachO/Symbol.hpp:101
This class represents a symbol in an executable format.
Definition Abstract/Symbol.hpp:28
LIEF namespace.
Definition Abstract/Binary.hpp:31