diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2025-10-13 19:36:47 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2025-10-21 13:52:40 -0400 |
| commit | c99c4f47ff9a86ea700005d55d435c1dacb2c764 (patch) | |
| tree | 1a919ba3caee505d241b821c0952d3f652dddb81 /ui/stringsview.h | |
| parent | 5d4fc5f1fb7a0c368d2a048a5d750564c970c9c9 (diff) | |
Refactor strings view to support derived strings
Diffstat (limited to 'ui/stringsview.h')
| -rw-r--r-- | ui/stringsview.h | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/ui/stringsview.h b/ui/stringsview.h index 99c66b79..b8689a3a 100644 --- a/ui/stringsview.h +++ b/ui/stringsview.h @@ -18,6 +18,36 @@ \ingroup uiapi */ +class StringsListItem +{ + std::variant<BNStringReference, BinaryNinja::DerivedString> m_contents; + +public: + StringsListItem(const BNStringReference& ref): m_contents(ref) {} + StringsListItem(const BinaryNinja::DerivedString& str): m_contents(str) {} + + bool IsStringReference() const { return std::holds_alternative<BNStringReference>(m_contents); } + bool IsDerivedString() const { return std::holds_alternative<BinaryNinja::DerivedString>(m_contents); } + std::optional<BNStringReference> GetStringReference() const; + std::optional<BinaryNinja::DerivedString> GetDerivedString() const; + + std::optional<uint64_t> GetStartAddress() const; + BNDerivedStringLocationType GetLocationType() const; + uint64_t GetDataLength() const; + size_t GetCharacterLength() const; + std::optional<BNStringType> GetStringType() const; + QString GetStringTypeName() const; + std::optional<BinaryNinja::StringRef> GetStringRef() const; + + QString GetString(BinaryViewRef data, bool simplified) const; + + std::optional<uint64_t> GetReferenceCount(const std::map<uint64_t, uint64_t>& refs, + const std::map<BinaryNinja::DerivedString, uint64_t>& derivedRefs) const; + + bool operator==(const StringsListItem& other) const; + bool operator!=(const StringsListItem& other) const; +}; + /*! \ingroup stringsview @@ -28,15 +58,16 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina struct StringUpdateEvent { - BNStringReference ref; + StringsListItem item; bool added; }; QWidget* m_stringsList; BinaryViewRef m_data; - std::vector<BNStringReference> m_allStrings; - std::vector<BNStringReference> m_strings; + std::vector<StringsListItem> m_allStrings; + std::vector<StringsListItem> m_strings; std::map<uint64_t, uint64_t> m_refCounts; + std::map<BinaryNinja::DerivedString, uint64_t> m_derivedRefCounts; std::string m_filter; size_t m_filteredByOptions; @@ -48,8 +79,8 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina bool m_includeOnlyReferenced; bool m_includeOnlyFromCurrentFunction; - static bool stringComparison(const BNStringReference& a, const BNStringReference& b); - bool matchString(const BNStringReference& stringRef); + static bool stringComparison(const StringsListItem& a, const StringsListItem& b); + bool matchString(const StringsListItem& item); std::vector<StringUpdateEvent> getQueuedStringUpdates(); @@ -74,8 +105,8 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina virtual QVariant data(const QModelIndex& i, int role) const override; virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override; - BNStringReference getStringAt(const QModelIndex& i); - QModelIndex findString(const BNStringReference& ref); + StringsListItem getStringAt(const QModelIndex& i); + QModelIndex findString(const StringsListItem& item); virtual void OnStringFound(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; virtual void OnStringRemoved(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; @@ -147,8 +178,10 @@ class BINARYNINJAUIAPI StringsView : public QTableView, public View, public Filt StringsListModel* m_list; StringItemDelegate* m_itemDelegate; + bool m_selectionAddrValid = false; uint64_t m_selectionBegin, m_selectionEnd; uint64_t m_currentlySelectedDataAddress; + std::optional<BinaryNinja::DerivedString> m_derivedString; public: StringsView(BinaryViewRef data, StringsContainer* container); @@ -156,6 +189,7 @@ class BINARYNINJAUIAPI StringsView : public QTableView, public View, public Filt virtual BinaryViewRef getData() override { return m_data; } virtual uint64_t getCurrentOffset() override; virtual BNAddressRange getSelectionOffsets() override; + virtual SelectionInfoForXref getSelectionForXref() override; virtual void setSelectionOffsets(BNAddressRange range) override; virtual bool navigate(uint64_t offset) override; |
