summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp83
1 files changed, 62 insertions, 21 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index cc6667c5..bef23750 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -129,6 +129,24 @@ void BinaryDataNotification::StringRemovedCallback(void* ctxt, BNBinaryView* obj
}
+void BinaryDataNotification::TypeDefinedCallback(void* ctxt, BNBinaryView* data, BNQualifiedName* name, BNType* type)
+{
+ BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
+ Ref<BinaryView> view = new BinaryView(BNNewViewReference(data));
+ Ref<Type> typeObj = new Type(BNNewTypeReference(type));
+ notify->OnTypeDefined(view, QualifiedName::FromAPIObject(name), typeObj);
+}
+
+
+void BinaryDataNotification::TypeUndefinedCallback(void* ctxt, BNBinaryView* data, BNQualifiedName* name, BNType* type)
+{
+ BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
+ Ref<BinaryView> view = new BinaryView(BNNewViewReference(data));
+ Ref<Type> typeObj = new Type(BNNewTypeReference(type));
+ notify->OnTypeUndefined(view, QualifiedName::FromAPIObject(name), typeObj);
+}
+
+
BinaryDataNotification::BinaryDataNotification()
{
m_callbacks.context = this;
@@ -143,6 +161,8 @@ BinaryDataNotification::BinaryDataNotification()
m_callbacks.dataVariableUpdated = DataVariableUpdatedCallback;
m_callbacks.stringFound = StringFoundCallback;
m_callbacks.stringRemoved = StringRemovedCallback;
+ m_callbacks.typeDefined = TypeDefinedCallback;
+ m_callbacks.typeUndefined = TypeUndefinedCallback;
}
@@ -1366,6 +1386,8 @@ vector<LinearDisassemblyLine> BinaryView::GetPreviousLinearDisassemblyLines(Line
token.value = lines[i].contents.tokens[j].value;
token.size = lines[i].contents.tokens[j].size;
token.operand = lines[i].contents.tokens[j].operand;
+ token.context = lines[i].contents.tokens[j].context;
+ token.address = lines[i].contents.tokens[j].address;
line.contents.tokens.push_back(token);
}
result.push_back(line);
@@ -1409,6 +1431,8 @@ vector<LinearDisassemblyLine> BinaryView::GetNextLinearDisassemblyLines(LinearDi
token.value = lines[i].contents.tokens[j].value;
token.size = lines[i].contents.tokens[j].size;
token.operand = lines[i].contents.tokens[j].operand;
+ token.context = lines[i].contents.tokens[j].context;
+ token.address = lines[i].contents.tokens[j].address;
line.contents.tokens.push_back(token);
}
result.push_back(line);
@@ -1423,9 +1447,9 @@ vector<LinearDisassemblyLine> BinaryView::GetNextLinearDisassemblyLines(LinearDi
}
-bool BinaryView::ParseTypeString(const string& text, NameAndType& result, string& errors)
+bool BinaryView::ParseTypeString(const string& text, QualifiedNameAndType& result, string& errors)
{
- BNNameAndType nt;
+ BNQualifiedNameAndType nt;
char* errorStr;
if (!BNParseTypeString(m_object, text.c_str(), &nt, &errorStr))
@@ -1435,64 +1459,81 @@ bool BinaryView::ParseTypeString(const string& text, NameAndType& result, string
return false;
}
- result.name = nt.name;
- result.type = new Type(nt.type);
+ result.name = QualifiedName::FromAPIObject(&nt.name);
+ result.type = new Type(BNNewTypeReference(nt.type));
errors = "";
- BNFreeString(nt.name);
+ BNFreeQualifiedNameAndType(&nt);
return true;
}
-map<string, Ref<Type>> BinaryView::GetTypes()
+map<QualifiedName, Ref<Type>> BinaryView::GetTypes()
{
size_t count;
- BNNameAndType* types = BNGetAnalysisTypeList(m_object, &count);
+ BNQualifiedNameAndType* types = BNGetAnalysisTypeList(m_object, &count);
- map<string, Ref<Type>> result;
+ map<QualifiedName, Ref<Type>> result;
for (size_t i = 0; i < count; i++)
- result[types[i].name] = new Type(BNNewTypeReference(types[i].type));
+ {
+ QualifiedName name = QualifiedName::FromAPIObject(&types[i].name);
+ result[name] = new Type(BNNewTypeReference(types[i].type));
+ }
BNFreeTypeList(types, count);
return result;
}
-Ref<Type> BinaryView::GetTypeByName(const string& name)
+Ref<Type> BinaryView::GetTypeByName(const QualifiedName& name)
{
- BNType* type = BNGetAnalysisTypeByName(m_object, name.c_str());
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNType* type = BNGetAnalysisTypeByName(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
+
if (!type)
return nullptr;
return new Type(type);
}
-bool BinaryView::IsTypeAutoDefined(const std::string& name)
+bool BinaryView::IsTypeAutoDefined(const QualifiedName& name)
{
- return BNIsAnalysisTypeAutoDefined(m_object, name.c_str());
+ BNQualifiedName nameObj = name.GetAPIObject();
+ bool result = BNIsAnalysisTypeAutoDefined(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
+ return result;
}
-void BinaryView::DefineType(const std::string& name, Ref<Type> type)
+void BinaryView::DefineType(const QualifiedName& name, Ref<Type> type)
{
- BNDefineAnalysisType(m_object, name.c_str(), type->GetObject());
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNDefineAnalysisType(m_object, &nameObj, type->GetObject());
+ QualifiedName::FreeAPIObject(&nameObj);
}
-void BinaryView::DefineUserType(const std::string& name, Ref<Type> type)
+void BinaryView::DefineUserType(const QualifiedName& name, Ref<Type> type)
{
- BNDefineUserAnalysisType(m_object, name.c_str(), type->GetObject());
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNDefineUserAnalysisType(m_object, &nameObj, type->GetObject());
+ QualifiedName::FreeAPIObject(&nameObj);
}
-void BinaryView::UndefineType(const std::string& name)
+void BinaryView::UndefineType(const QualifiedName& name)
{
- BNUndefineAnalysisType(m_object, name.c_str());
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNUndefineAnalysisType(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
}
-void BinaryView::UndefineUserType(const std::string& name)
+void BinaryView::UndefineUserType(const QualifiedName& name)
{
- BNUndefineUserAnalysisType(m_object, name.c_str());
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNUndefineUserAnalysisType(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
}