[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Vector35/binaryninja-api/dev/component.cpp [Back]  [Original]

#include "binaryninjaapi.h"

using namespace BinaryNinja;
using namespace std;

bool Component::operator==(const Component& other) const
{
	return BNComponentsEqual(m_object, other.m_object);
}


bool Component::operator!=(const Component& other) const
{
	return BNComponentsNotEqual(m_object, other.m_object);
}


Component::Component(BNComponent* component)
{
	m_object = component;
}


std::string Component::GetDisplayName()
{
	char* result = BNComponentGetDisplayName(m_object);
	string stringResult = result;
	BNFreeString(result);
	return stringResult;
}


std::string Component::GetName()
{
	char* result = BNComponentGetOriginalName(m_object);
	string stringResult = result;
	BNFreeString(result);
	return stringResult;
}


Ref Component::GetView()
{
	return new BinaryView(BNComponentGetView(m_object));
}


void Component::SetName(const std::string &name)
{
	BNComponentSetName(m_object, name.c_str());
}


Ref Component::GetParent()
{
	return new Component(BNComponentGetParent(m_object));
}


std::string Component::GetGuid()
{
	char* result = BNComponentGetGuid(m_object);
	string stringResult = result;
	BNFreeString(result);
	return stringResult;
}


bool Component::AddFunction(Ref func)
{
	return BNComponentAddFunctionReference(m_object, func->GetObject());
}


bool Component::AddComponent(Ref component)
{
	return BNComponentAddComponent(m_object, component->m_object);
}


bool Component::AddDataVariable(DataVariable dataVariable)
{
	return BNComponentAddDataVariable(m_object, dataVariable.address);
}


bool Component::RemoveComponent(Ref component)
{
	return BNComponentRemoveComponent(component->m_object);
}


bool Component::RemoveFunction(Ref func)
{
	return BNComponentRemoveFunctionReference(m_object, func->GetObject());
}


bool Component::RemoveDataVariable(DataVariable dataVariable)
{
	return BNComponentRemoveDataVariable(m_object, dataVariable.address);
}


std::vector Component::GetContainedComponents()
{
	std::vector components;

	size_t count;
	BNComponent** list = BNComponentGetContainedComponents(m_object, &count);

	components.reserve(count);
	for (size_t i = 0; i < count; i++)
	{
		Ref component = new Component(BNNewComponentReference(list[i]));
		components.push_back(component);
	}

	BNFreeComponents(list, count);

	return components;
}


std::vector Component::GetContainedFunctions()
{
	std::vector functions;

	size_t count;
	BNFunction** list = BNComponentGetContainedFunctions(m_object, &count);

	functions.reserve(count);
	for (size_t i = 0; i < count; i++)
	{
		Ref function = new Function(BNNewFunctionReference(list[i]));
		functions.push_back(function);
	}

	BNFreeFunctionList(list, count);

	return functions;
}


std::vector Component::GetContainedDataVariables()
{
	vector result;

	size_t count;
	BNDataVariable* variables = BNComponentGetContainedDataVariables(m_object, &count);

	result.reserve(count);
	for (size_t i = 0; i < count; ++i)
	{
		result.emplace_back(variables[i].address,
			Confidence(new Type(BNNewTypeReference(variables[i].type)), variables[i].typeConfidence),
			variables[i].autoDiscovered);
	}

	BNFreeDataVariables(variables, count);
	return result;
}


std::vector Component::GetReferencedTypes()
{
	std::vector types;

	size_t count;
	BNType** list = BNComponentGetReferencedTypes(m_object, &count);

	types.reserve(count);
	for (size_t i = 0; i < count; i++)
	{
		Ref type = new Type(BNNewTypeReference(list[i]));
		types.push_back(type);
	}

	BNComponentFreeReferencedTypes(list, count);

	return types;
}


std::vector Component::GetReferencedDataVariables()
{
	vector result;

	size_t count;
	BNDataVariable* variables = BNComponentGetReferencedDataVariables(m_object, &count);

	result.reserve(count);
	for (size_t i = 0; i < count; ++i)
	{
		result.emplace_back(variables[i].address,
			Confidence(new Type(BNNewTypeReference(variables[i].type)), variables[i].typeConfidence),
			variables[i].autoDiscovered);
	}

	BNFreeDataVariables(variables, count);
	return result;
}

Web Proxy Viewer  |  New URL  |  Original Page