1818 \ingroup uiapi
1919*/
2020
21+ class StringsListItem
22+ {
23+ std::variant<BNStringReference, BinaryNinja::DerivedString> m_contents;
24+
25+ public:
26+ StringsListItem (const BNStringReference& ref): m_contents(ref) {}
27+ StringsListItem (const BinaryNinja::DerivedString& str): m_contents(str) {}
28+
29+ bool IsStringReference () const { return std::holds_alternative<BNStringReference>(m_contents); }
30+ bool IsDerivedString () const { return std::holds_alternative<BinaryNinja::DerivedString>(m_contents); }
31+ std::optional<BNStringReference> GetStringReference () const ;
32+ std::optional<BinaryNinja::DerivedString> GetDerivedString () const ;
33+
34+ std::optional<uint64_t > GetStartAddress () const ;
35+ BNDerivedStringLocationType GetLocationType () const ;
36+ uint64_t GetDataLength () const ;
37+ size_t GetCharacterLength () const ;
38+ std::optional<BNStringType> GetStringType () const ;
39+ QString GetStringTypeName () const ;
40+ std::optional<BinaryNinja::StringRef> GetStringRef () const ;
41+
42+ QString GetString (BinaryViewRef data, bool simplified) const ;
43+
44+ std::optional<uint64_t > GetReferenceCount (const std::map<uint64_t , uint64_t >& refs,
45+ const std::map<BinaryNinja::DerivedString, uint64_t >& derivedRefs) const ;
46+
47+ bool operator ==(const StringsListItem& other) const ;
48+ bool operator !=(const StringsListItem& other) const ;
49+ };
50+
2151/* !
2252
2353 \ingroup stringsview
@@ -28,15 +58,16 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
2858
2959 struct StringUpdateEvent
3060 {
31- BNStringReference ref ;
61+ StringsListItem item ;
3262 bool added;
3363 };
3464
3565 QWidget* m_stringsList;
3666 BinaryViewRef m_data;
37- std::vector<BNStringReference > m_allStrings;
38- std::vector<BNStringReference > m_strings;
67+ std::vector<StringsListItem > m_allStrings;
68+ std::vector<StringsListItem > m_strings;
3969 std::map<uint64_t , uint64_t > m_refCounts;
70+ std::map<BinaryNinja::DerivedString, uint64_t > m_derivedRefCounts;
4071 std::string m_filter;
4172
4273 size_t m_filteredByOptions;
@@ -48,8 +79,8 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
4879 bool m_includeOnlyReferenced;
4980 bool m_includeOnlyFromCurrentFunction;
5081
51- static bool stringComparison (const BNStringReference & a, const BNStringReference & b);
52- bool matchString (const BNStringReference& stringRef );
82+ static bool stringComparison (const StringsListItem & a, const StringsListItem & b);
83+ bool matchString (const StringsListItem& item );
5384
5485 std::vector<StringUpdateEvent> getQueuedStringUpdates ();
5586
@@ -74,8 +105,8 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
74105 virtual QVariant data (const QModelIndex& i, int role) const override ;
75106 virtual QVariant headerData (int section, Qt::Orientation orientation, int role) const override ;
76107
77- BNStringReference getStringAt (const QModelIndex& i);
78- QModelIndex findString (const BNStringReference& ref );
108+ StringsListItem getStringAt (const QModelIndex& i);
109+ QModelIndex findString (const StringsListItem& item );
79110
80111 virtual void OnStringFound (BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override ;
81112 virtual void OnStringRemoved (BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override ;
@@ -147,15 +178,18 @@ class BINARYNINJAUIAPI StringsView : public QTableView, public View, public Filt
147178 StringsListModel* m_list;
148179 StringItemDelegate* m_itemDelegate;
149180
181+ bool m_selectionAddrValid = false ;
150182 uint64_t m_selectionBegin, m_selectionEnd;
151183 uint64_t m_currentlySelectedDataAddress;
184+ std::optional<BinaryNinja::DerivedString> m_derivedString;
152185
153186 public:
154187 StringsView (BinaryViewRef data, StringsContainer* container);
155188
156189 virtual BinaryViewRef getData () override { return m_data; }
157190 virtual uint64_t getCurrentOffset () override ;
158191 virtual BNAddressRange getSelectionOffsets () override ;
192+ virtual SelectionInfoForXref getSelectionForXref () override ;
159193 virtual void setSelectionOffsets (BNAddressRange range) override ;
160194 virtual bool navigate (uint64_t offset) override ;
161195
0 commit comments