From 2111f1f77241c938b30bd3cf2851919094429dd6 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Sun, 14 May 2017 09:41:28 -0400 Subject: Expose some core API's for the demangling and type creation --- demangle.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'demangle.cpp') diff --git a/demangle.cpp b/demangle.cpp index 70a2fe08..677998d2 100644 --- a/demangle.cpp +++ b/demangle.cpp @@ -1,18 +1,22 @@ #include "binaryninjaapi.h" -using namespace BinaryNinja; using namespace std; +namespace BinaryNinja +{ bool DemangleMS(Architecture* arch, const std::string& mangledName, Type** outType, QualifiedName& outVarName) { - BNType* localType = (*outType)->GetObject(); + BNType* localType = nullptr; char** localVarName = nullptr; size_t localSize = 0; if (!BNDemangleMS(arch->GetObject(), mangledName.c_str(), &localType, &localVarName, &localSize)) return false; + if (!localType) + return false; + *outType = new Type(localType); for (size_t i = 0; i < localSize; i++) { outVarName.push_back(localVarName[i]); @@ -23,16 +27,19 @@ bool DemangleMS(Architecture* arch, } -bool DemangleGNU3(Architecture* arch, +bool DemangleGNU3(Ref arch, const std::string& mangledName, Type** outType, QualifiedName& outVarName) { - BNType* localType = (*outType)->GetObject(); + BNType* localType; char** localVarName = nullptr; size_t localSize = 0; if (!BNDemangleGNU3(arch->GetObject(), mangledName.c_str(), &localType, &localVarName, &localSize)) return false; + if (!localType) + return false; + *outType = new Type(localType); for (size_t i = 0; i < localSize; i++) { outVarName.push_back(localVarName[i]); @@ -41,3 +48,4 @@ bool DemangleGNU3(Architecture* arch, delete [] localVarName; return true; } +} \ No newline at end of file -- cgit v1.3.1