diff options
Diffstat (limited to 'demangle.cpp')
| -rw-r--r-- | demangle.cpp | 70 |
1 files changed, 39 insertions, 31 deletions
diff --git a/demangle.cpp b/demangle.cpp index a12303ca..c3867aed 100644 --- a/demangle.cpp +++ b/demangle.cpp @@ -1,43 +1,51 @@ #include "binaryninjaapi.h" -using namespace BinaryNinja; using namespace std; -bool DemangleMS(Architecture* arch, - const std::string& mangledName, - Type** outType, - std::vector<std::string>& outVarName) +namespace BinaryNinja { - BNType* localType = (*outType)->GetObject(); - char** localVarName = nullptr; - size_t localSize = 0; - if (!BNDemangleMS(arch->GetObject(), mangledName.c_str(), &localType, &localVarName, &localSize)) - return false; - for (size_t i = 0; i < localSize; i++) + bool DemangleMS(Architecture* arch, + const std::string& mangledName, + Type** outType, + QualifiedName& outVarName) { - outVarName.push_back(localVarName[i]); - BNFreeString(localVarName[i]); + 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]); + BNFreeString(localVarName[i]); + } + delete [] localVarName; + return true; } - delete [] localVarName; - return true; -} -bool DemangleGNU3(Architecture* arch, - const std::string& mangledName, - Type** outType, - std::vector<std::string>& outVarName) -{ - BNType* localType = (*outType)->GetObject(); - char** localVarName = nullptr; - size_t localSize = 0; - if (!BNDemangleGNU3(arch->GetObject(), mangledName.c_str(), &localType, &localVarName, &localSize)) - return false; - for (size_t i = 0; i < localSize; i++) + bool DemangleGNU3(Ref<Architecture> arch, + const std::string& mangledName, + Type** outType, + QualifiedName& outVarName) { - outVarName.push_back(localVarName[i]); - BNFreeString(localVarName[i]); + 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]); + BNFreeString(localVarName[i]); + } + delete [] localVarName; + return true; } - delete [] localVarName; - return true; } |
