diff options
| -rw-r--r-- | binaryninjaapi.h | 11 | ||||
| -rw-r--r-- | binaryninjacore.h | 13 | ||||
| -rw-r--r-- | function.cpp | 6 | ||||
| -rw-r--r-- | languagerepresentation.cpp | 15 | ||||
| -rw-r--r-- | linearviewobject.cpp | 7 | ||||
| -rw-r--r-- | python/lineardisassembly.py | 6 |
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): |
