summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjaapi.h11
-rw-r--r--binaryninjacore.h13
-rw-r--r--function.cpp6
-rw-r--r--languagerepresentation.cpp15
-rw-r--r--linearviewobject.cpp7
-rw-r--r--python/lineardisassembly.py6
6 files changed, 57 insertions, 1 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 77b949b6..2203c803 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -2314,6 +2314,7 @@ __attribute__ ((format (printf, 1, 2)))
class LowLevelILFunction;
class MediumLevelILFunction;
class HighLevelILFunction;
+ class LanguageRepresentationFunction;
class FunctionRecognizer;
class CallingConvention;
class RelocationHandler;
@@ -3506,6 +3507,7 @@ __attribute__ ((format (printf, 1, 2)))
Ref<MediumLevelILFunction> GetMediumLevelILIfAvailable() const;
Ref<HighLevelILFunction> GetHighLevelIL() const;
Ref<HighLevelILFunction> GetHighLevelILIfAvailable() const;
+ Ref<LanguageRepresentationFunction> GetLanguageRepresentation() const;
Ref<Type> GetType() const;
Confidence<Ref<Type>> GetReturnType() const;
@@ -4871,6 +4873,14 @@ __attribute__ ((format (printf, 1, 2)))
std::set<size_t> GetUsesForLabel(uint64_t label);
};
+ class LanguageRepresentationFunction: public CoreRefCountObject<BNLanguageRepresentationFunction,
+ BNNewLanguageRepresentationFunctionReference, BNFreeLanguageRepresentationFunction>
+ {
+ public:
+ LanguageRepresentationFunction(Architecture* arch, Function* func = nullptr);
+ LanguageRepresentationFunction(BNLanguageRepresentationFunction* func);
+ };
+
class FunctionRecognizer
{
static bool RecognizeLowLevelILCallback(void* ctxt, BNBinaryView* data, BNFunction* func, BNLowLevelILFunction* il);
@@ -6070,6 +6080,7 @@ __attribute__ ((format (printf, 1, 2)))
static Ref<LinearViewObject> CreateMappedMediumLevelILSSAForm(BinaryView* view, DisassemblySettings* settings);
static Ref<LinearViewObject> CreateHighLevelIL(BinaryView* view, DisassemblySettings* settings);
static Ref<LinearViewObject> CreateHighLevelILSSAForm(BinaryView* view, DisassemblySettings* settings);
+ static Ref<LinearViewObject> CreateLanguageRepresentation(BinaryView* view, DisassemblySettings* settings);
};
class LinearViewCursor: public CoreRefCountObject<BNLinearViewCursor,
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 5a9edfc2..fca627c3 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -177,6 +177,7 @@ extern "C"
struct BNLowLevelILFunction;
struct BNMediumLevelILFunction;
struct BNHighLevelILFunction;
+ struct BNLanguageRepresentationFunction;
struct BNType;
struct BNTypeBuilder;
struct BNTypeLibrary;
@@ -587,7 +588,8 @@ extern "C"
MappedMediumLevelILFunctionGraph = 6,
MappedMediumLevelILSSAFormFunctionGraph = 7,
HighLevelILFunctionGraph = 8,
- HighLevelILSSAFormFunctionGraph = 9
+ HighLevelILSSAFormFunctionGraph = 9,
+ HighLevelLanguageRepresentationFunctionGraph = 10,
};
enum BNDisassemblyOption
@@ -3469,6 +3471,7 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionMediumLevelILIfAvailable(BNFunction* func);
BINARYNINJACOREAPI BNHighLevelILFunction* BNGetFunctionHighLevelIL(BNFunction* func);
BINARYNINJACOREAPI BNHighLevelILFunction* BNGetFunctionHighLevelILIfAvailable(BNFunction* func);
+ BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNGetFunctionLanguageRepresentation(BNFunction* func);
BINARYNINJACOREAPI BNRegisterValue BNGetRegisterValueAtInstruction(BNFunction* func, BNArchitecture* arch,
uint64_t addr, uint32_t reg);
BINARYNINJACOREAPI BNRegisterValue BNGetRegisterValueAfterInstruction(BNFunction* func, BNArchitecture* arch,
@@ -3832,6 +3835,8 @@ __attribute__ ((format (printf, 1, 2)))
BNDisassemblySettings* settings);
BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewHighLevelILSSAForm(BNBinaryView* view,
BNDisassemblySettings* settings);
+ BINARYNINJACOREAPI BNLinearViewObject* BNCreateLinearViewLanguageRepresentation(BNBinaryView* view,
+ BNDisassemblySettings* settings);
BINARYNINJACOREAPI BNLinearViewObject* BNNewLinearViewObjectReference(BNLinearViewObject* obj);
BINARYNINJACOREAPI void BNFreeLinearViewObject(BNLinearViewObject* obj);
BINARYNINJACOREAPI BNLinearViewObject* BNGetFirstLinearViewObjectChild(BNLinearViewObject* obj);
@@ -4713,6 +4718,12 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI void BNBinaryViewExportTypeToTypeLibrary(BNBinaryView* view, BNTypeLibrary* lib, BNQualifiedName* name, BNType* type);
BINARYNINJACOREAPI void BNBinaryViewExportObjectToTypeLibrary(BNBinaryView* view, BNTypeLibrary* lib, BNQualifiedName* name, BNType* type);
+ // Language Representation
+ BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNCreateLanguageRepresentationFunction(BNArchitecture* arch, BNFunction* func);
+ BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNNewLanguageRepresentationFunctionReference(BNLanguageRepresentationFunction* func);
+ BINARYNINJACOREAPI void BNFreeLanguageRepresentationFunction(BNLanguageRepresentationFunction* func);
+ BINARYNINJACOREAPI BNFunction* BNGetLanguageRepresentationOwnerFunction(BNLanguageRepresentationFunction* func);
+
// Types
BINARYNINJACOREAPI bool BNTypesEqual(BNType* a, BNType* b);
BINARYNINJACOREAPI bool BNTypesNotEqual(BNType* a, BNType* b);
diff --git a/function.cpp b/function.cpp
index 0f70e939..9123c19e 100644
--- a/function.cpp
+++ b/function.cpp
@@ -699,6 +699,12 @@ Ref<HighLevelILFunction> Function::GetHighLevelILIfAvailable() const
}
+Ref<LanguageRepresentationFunction> Function::GetLanguageRepresentation() const
+{
+ return new LanguageRepresentationFunction(BNGetFunctionLanguageRepresentation(m_object));
+}
+
+
Ref<Type> Function::GetType() const
{
return new Type(BNGetFunctionType(m_object));
diff --git a/languagerepresentation.cpp b/languagerepresentation.cpp
new file mode 100644
index 00000000..62f592e8
--- /dev/null
+++ b/languagerepresentation.cpp
@@ -0,0 +1,15 @@
+#include "binaryninjaapi.h"
+
+using namespace BinaryNinja;
+using namespace std;
+
+LanguageRepresentationFunction::LanguageRepresentationFunction(Architecture* arch, Function* func)
+{
+ m_object = BNCreateLanguageRepresentationFunction(arch->GetObject(), func ? func->GetObject() : nullptr);
+}
+
+
+LanguageRepresentationFunction::LanguageRepresentationFunction(BNLanguageRepresentationFunction* func)
+{
+ m_object = func;
+} \ No newline at end of file
diff --git a/linearviewobject.cpp b/linearviewobject.cpp
index cbfebe29..17229836 100644
--- a/linearviewobject.cpp
+++ b/linearviewobject.cpp
@@ -276,3 +276,10 @@ Ref<LinearViewObject> LinearViewObject::CreateHighLevelILSSAForm(BinaryView* vie
return new LinearViewObject(BNCreateLinearViewHighLevelILSSAForm(view->GetObject(),
settings ? settings->GetObject() : nullptr));
}
+
+
+Ref<LinearViewObject> LinearViewObject::CreateLanguageRepresentation(BinaryView* view, DisassemblySettings* settings)
+{
+ return new LinearViewObject(BNCreateLinearViewLanguageRepresentation(view->GetObject(),
+ settings ? settings->GetObject() : nullptr));
+}
diff --git a/python/lineardisassembly.py b/python/lineardisassembly.py
index 42b7e333..c295841e 100644
--- a/python/lineardisassembly.py
+++ b/python/lineardisassembly.py
@@ -341,6 +341,12 @@ class LinearViewObject:
_settings = _settings.handle
return LinearViewObject(core.BNCreateLinearViewHighLevelILSSAForm(view.handle, _settings))
+ @staticmethod
+ def language_representation(view:'binaryview.BinaryView', settings:Optional['_function.DisassemblySettings'] = None) -> 'LinearViewObject':
+ _settings = settings
+ if _settings is not None:
+ _settings = _settings.handle
+ return LinearViewObject(core.BNCreateLinearViewLanguageRepresentation(view.handle, _settings))
class LinearViewCursor:
def __init__(self, root_object, handle = None):