Skip to content

Commit de4fbe2

Browse files
committed
Make template simplification demangler-controlled and expand structured template simplifier coverage
1 parent d478378 commit de4fbe2

19 files changed

Lines changed: 909 additions & 381 deletions

binaryninjaapi.h

Lines changed: 3 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2542,26 +2542,6 @@ namespace BinaryNinja {
25422542
*/
25432543
bool IsGNU3MangledString(const std::string& mangledName);
25442544

2545-
/*!
2546-
\ingroup demangle
2547-
*/
2548-
std::string SimplifyToString(const std::string& input);
2549-
2550-
/*!
2551-
\ingroup demangle
2552-
*/
2553-
std::string SimplifyToString(const QualifiedName& input);
2554-
2555-
/*!
2556-
\ingroup demangle
2557-
*/
2558-
QualifiedName SimplifyToQualifiedName(const std::string& input, bool simplify);
2559-
2560-
/*!
2561-
\ingroup demangle
2562-
*/
2563-
QualifiedName SimplifyToQualifiedName(const QualifiedName& input);
2564-
25652545
/*!
25662546
\ingroup mainthread
25672547
*/
@@ -20477,38 +20457,6 @@ namespace BinaryNinja {
2047720457
static int Compare(LinearViewCursor* a, LinearViewCursor* b);
2047820458
};
2047920459

20480-
/*!
20481-
20482-
\ingroup simplifyname
20483-
*/
20484-
class SimplifyName
20485-
{
20486-
public:
20487-
// Use these functions to interface with the simplifier
20488-
static std::string to_string(const std::string& input);
20489-
static std::string to_string(const QualifiedName& input);
20490-
static QualifiedName to_qualified_name(const std::string& input, bool simplify);
20491-
static QualifiedName to_qualified_name(const QualifiedName& input);
20492-
20493-
// Below is everything for the above APIs to work
20494-
enum SimplifierDest
20495-
{
20496-
str,
20497-
fqn
20498-
};
20499-
20500-
SimplifyName(const std::string&, const SimplifierDest, const bool);
20501-
~SimplifyName();
20502-
20503-
operator std::string() const;
20504-
operator QualifiedName();
20505-
20506-
private:
20507-
const char* m_rust_string;
20508-
const char** m_rust_array;
20509-
uint64_t m_length;
20510-
};
20511-
2051220460
struct FindParameters
2051320461
{
2051420462
BNFindType type;
@@ -22294,7 +22242,7 @@ namespace BinaryNinja {
2229422242

2229522243
static bool IsMangledStringCallback(void* ctxt, const char* name);
2229622244
static bool DemangleCallback(void* ctxt, BNArchitecture* arch, const char* name, BNType** outType,
22297-
BNQualifiedName* outVarName, BNBinaryView* view);
22245+
BNQualifiedName* outVarName, BNBinaryView* view, bool simplify);
2229822246
static void FreeVarNameCallback(void* ctxt, BNQualifiedName* name);
2229922247

2230022248
public:
@@ -22355,7 +22303,7 @@ namespace BinaryNinja {
2235522303
\return True if demangling was successful and results were stored into out-parameters
2235622304
*/
2235722305
virtual bool Demangle(Ref<Architecture> arch, const std::string& name, Ref<Type>& outType,
22358-
QualifiedName& outVarName, Ref<BinaryView> view = nullptr) = 0;
22306+
QualifiedName& outVarName, Ref<BinaryView> view = nullptr, bool simplify = false) = 0;
2235922307
};
2236022308

2236122309
/*!
@@ -22369,7 +22317,7 @@ namespace BinaryNinja {
2236922317

2237022318
virtual bool IsMangledString(const std::string& name);
2237122319
virtual bool Demangle(Ref<Architecture> arch, const std::string& name, Ref<Type>& outType,
22372-
QualifiedName& outVarName, Ref<BinaryView> view);
22320+
QualifiedName& outVarName, Ref<BinaryView> view, bool simplify = false);
2237322321
};
2237422322

2237522323
namespace Unicode

binaryninjacore.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3819,7 +3819,7 @@ extern "C"
38193819
void* context;
38203820
bool (*isMangledString)(void* ctxt, const char* name);
38213821
bool (*demangle)(void* ctxt, BNArchitecture* arch, const char* name, BNType** outType,
3822-
BNQualifiedName* outVarName, BNBinaryView* view);
3822+
BNQualifiedName* outVarName, BNBinaryView* view, bool simplify);
38233823
void (*freeVarName)(void* ctxt, BNQualifiedName* name);
38243824
} BNDemanglerCallbacks;
38253825

@@ -8163,6 +8163,8 @@ extern "C"
81638163
BINARYNINJACOREAPI void BNPromoteDemangler(BNDemangler* demangler);
81648164

81658165
BINARYNINJACOREAPI bool BNIsDemanglerMangledName(BNDemangler* demangler, const char* name);
8166+
BINARYNINJACOREAPI bool BNDemanglerDemangleWithOptions(BNDemangler* demangler, BNArchitecture* arch,
8167+
const char* name, BNType** outType, BNQualifiedName* outVarName, BNBinaryView* view, bool simplify);
81668168
BINARYNINJACOREAPI bool BNDemanglerDemangle(BNDemangler* demangler, BNArchitecture* arch, const char* name,
81678169
BNType** outType, BNQualifiedName* outVarName, BNBinaryView* view);
81688170
BINARYNINJACOREAPI bool BNDemangleGeneric(BNArchitecture* arch, const char* name,
@@ -8527,9 +8529,6 @@ extern "C"
85278529

85288530
BINARYNINJACOREAPI uint32_t BNGetAddressRenderedWidth(uint64_t addr);
85298531

8530-
BINARYNINJACOREAPI BNQualifiedName BNRustSimplifyStrToFQN(const char* const, bool);
8531-
BINARYNINJACOREAPI char* BNRustSimplifyStrToStr(const char* const);
8532-
85338532
BINARYNINJACOREAPI BNDebugInfoParser* BNRegisterDebugInfoParser(const char* name,
85348533
bool (*isValid)(void*, BNBinaryView*),
85358534
bool (*parseInfo)(void*, BNDebugInfo*, BNBinaryView*, BNBinaryView*, BNProgressFunction, void*),

demangle.cpp

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -111,35 +111,6 @@ namespace BinaryNinja {
111111
}
112112

113113

114-
string SimplifyToString(const string& input)
115-
{
116-
return BNRustSimplifyStrToStr(input.c_str());
117-
}
118-
119-
120-
string SimplifyToString(const QualifiedName& input)
121-
{
122-
return BNRustSimplifyStrToStr(input.GetString().c_str());
123-
}
124-
125-
126-
QualifiedName SimplifyToQualifiedName(const string& input, bool simplify)
127-
{
128-
BNQualifiedName name = BNRustSimplifyStrToFQN(input.c_str(), simplify);
129-
QualifiedName result = QualifiedName::FromAPIObject(&name);
130-
BNFreeQualifiedName(&name);
131-
return result;
132-
}
133-
134-
135-
QualifiedName SimplifyToQualifiedName(const QualifiedName& input)
136-
{
137-
BNQualifiedName name = BNRustSimplifyStrToFQN(input.GetString().c_str(), true);
138-
QualifiedName result = QualifiedName::FromAPIObject(&name);
139-
BNFreeQualifiedName(&name);
140-
return result;
141-
}
142-
143114
Demangler::Demangler(const std::string& name): m_nameForRegister(name)
144115
{
145116
}
@@ -156,7 +127,7 @@ namespace BinaryNinja {
156127
}
157128

158129
bool Demangler::DemangleCallback(void* ctxt, BNArchitecture* arch, const char* name, BNType** outType,
159-
BNQualifiedName* outVarName, BNBinaryView* view)
130+
BNQualifiedName* outVarName, BNBinaryView* view, bool simplify)
160131
{
161132
Demangler* demangler = (Demangler*)ctxt;
162133

@@ -165,7 +136,7 @@ namespace BinaryNinja {
165136

166137
Ref<Type> apiType;
167138
QualifiedName apiVarName;
168-
bool success = demangler->Demangle(apiArch, name, apiType, apiVarName, apiView);
139+
bool success = demangler->Demangle(apiArch, name, apiType, apiVarName, apiView, simplify);
169140
if (!success)
170141
return false;
171142

@@ -240,12 +211,12 @@ namespace BinaryNinja {
240211
}
241212

242213
bool CoreDemangler::Demangle(Ref<Architecture> arch, const std::string& name, Ref<Type>& outType,
243-
QualifiedName& outVarName, Ref<BinaryView> view)
214+
QualifiedName& outVarName, Ref<BinaryView> view, bool simplify)
244215
{
245216
BNType* apiType;
246217
BNQualifiedName apiVarName;
247-
bool success = BNDemanglerDemangle(
248-
m_object, arch->m_object, name.c_str(), &apiType, &apiVarName, view ? view->m_object : nullptr);
218+
bool success = BNDemanglerDemangleWithOptions(
219+
m_object, arch->m_object, name.c_str(), &apiType, &apiVarName, view ? view->m_object : nullptr, simplify);
249220

250221
if (!success)
251222
return false;

0 commit comments

Comments
 (0)