diff options
Diffstat (limited to 'binaryview.cpp')
| -rw-r--r-- | binaryview.cpp | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/binaryview.cpp b/binaryview.cpp index 82fcdc6d..c091a6b1 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -37,6 +37,63 @@ BinaryDataNotification::BinaryDataNotification() } +Symbol::Symbol(BNSymbolType type, const string& shortName, const string& fullName, const string& rawName, uint64_t addr) +{ + m_sym = BNCreateSymbol(type, shortName.c_str(), fullName.c_str(), rawName.c_str(), addr); +} + + +Symbol::Symbol(BNSymbol* sym) +{ + m_sym = sym; +} + + +Symbol::~Symbol() +{ + BNFreeSymbol(m_sym); +} + + +BNSymbolType Symbol::GetType() const +{ + return BNGetSymbolType(m_sym); +} + + +string Symbol::GetShortName() const +{ + char* name = BNGetSymbolShortName(m_sym); + string result = name; + BNFreeString(name); + return result; +} + + +string Symbol::GetFullName() const +{ + char* name = BNGetSymbolFullName(m_sym); + string result = name; + BNFreeString(name); + return result; +} + + +string Symbol::GetRawName() const +{ + char* name = BNGetSymbolRawName(m_sym); + string result = name; + BNFreeString(name); + return result; +} + + +uint64_t Symbol::GetAddress() const +{ + return BNGetSymbolAddress(m_sym); +} + + BinaryView::BinaryView(FileMetadata* file) { BNCustomBinaryView view; @@ -432,6 +489,90 @@ vector<Ref<BasicBlock>> BinaryView::GetBasicBlocksForAddress(uint64_t addr) } +Ref<Symbol> BinaryView::GetSymbolByAddress(uint64_t addr) +{ + BNSymbol* sym = BNGetSymbolByAddress(m_view, addr); + if (!sym) + return nullptr; + return new Symbol(sym); +} + + +Ref<Symbol> BinaryView::GetSymbolByRawName(const string& name) +{ + BNSymbol* sym = BNGetSymbolByRawName(m_view, name.c_str()); + if (!sym) + return nullptr; + return new Symbol(sym); +} + + +vector<Ref<Symbol>> BinaryView::GetSymbolsByName(const string& name) +{ + size_t count; + BNSymbol** syms = BNGetSymbolsByName(m_view, name.c_str(), &count); + + vector<Ref<Symbol>> result; + for (size_t i = 0; i < count; i++) + result.push_back(new Symbol(BNNewSymbolReference(syms[i]))); + + BNFreeSymbolList(syms, count); + return result; +} + + +vector<Ref<Symbol>> BinaryView::GetSymbols() +{ + size_t count; + BNSymbol** syms = BNGetSymbols(m_view, &count); + + vector<Ref<Symbol>> result; + for (size_t i = 0; i < count; i++) + result.push_back(new Symbol(BNNewSymbolReference(syms[i]))); + + BNFreeSymbolList(syms, count); + return result; +} + + +vector<Ref<Symbol>> BinaryView::GetSymbolsOfType(BNSymbolType type) +{ + size_t count; + BNSymbol** syms = BNGetSymbolsOfType(m_view, type, &count); + + vector<Ref<Symbol>> result; + for (size_t i = 0; i < count; i++) + result.push_back(new Symbol(BNNewSymbolReference(syms[i]))); + + BNFreeSymbolList(syms, count); + return result; +} + + +void BinaryView::DefineAutoSymbol(Symbol* sym) +{ + BNDefineAutoSymbol(m_view, sym->GetSymbolObject()); +} + + +void BinaryView::UndefineAutoSymbol(Symbol* sym) +{ + BNUndefineAutoSymbol(m_view, sym->GetSymbolObject()); +} + + +void BinaryView::DefineSymbol(Symbol* sym) +{ + BNDefineSymbol(m_view, sym->GetSymbolObject()); +} + + +void BinaryView::UndefineSymbol(Symbol* sym) +{ + BNUndefineSymbol(m_view, sym->GetSymbolObject()); +} + + BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetFileObject())) { } |
