diff options
| author | Peter LaFosse <peter@vector35.com> | 2022-01-20 13:16:29 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2022-01-20 13:16:29 -0500 |
| commit | 65c1ab279b34f11070a450de993886df9c7353ec (patch) | |
| tree | fff31eaca0be83e034f9356465b02f7224ce47a2 | |
| parent | b97912fbac14e760f1b595180ffe58af1ee34194 (diff) | |
Add support for mmlil_if_available
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 2 | ||||
| -rw-r--r-- | function.cpp | 15 | ||||
| -rw-r--r-- | python/function.py | 13 | ||||
| -rw-r--r-- | python/mediumlevelil.py | 1 |
5 files changed, 33 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 0fc38edd..c9cff3cf 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3508,6 +3508,8 @@ __attribute__ ((format (printf, 1, 2))) Ref<MediumLevelILFunction> GetMediumLevelIL() const; Ref<MediumLevelILFunction> GetMediumLevelILIfAvailable() const; + Ref<MediumLevelILFunction> GetMappedMediumLevelIL() const; + Ref<MediumLevelILFunction> GetMappedMediumLevelILIfAvailable() const; Ref<HighLevelILFunction> GetHighLevelIL() const; Ref<HighLevelILFunction> GetHighLevelILIfAvailable() const; Ref<LanguageRepresentationFunction> GetLanguageRepresentation() const; diff --git a/binaryninjacore.h b/binaryninjacore.h index eb6833a4..c28490ab 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -3469,6 +3469,8 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI void BNFreeILInstructionList(size_t* list); BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionMediumLevelIL(BNFunction* func); BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionMediumLevelILIfAvailable(BNFunction* func); + BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionMappedMediumLevelIL(BNFunction* func); + BINARYNINJACOREAPI BNMediumLevelILFunction* BNGetFunctionMappedMediumLevelILIfAvailable(BNFunction* func); BINARYNINJACOREAPI BNHighLevelILFunction* BNGetFunctionHighLevelIL(BNFunction* func); BINARYNINJACOREAPI BNHighLevelILFunction* BNGetFunctionHighLevelILIfAvailable(BNFunction* func); BINARYNINJACOREAPI BNLanguageRepresentationFunction* BNGetFunctionLanguageRepresentation(BNFunction* func); diff --git a/function.cpp b/function.cpp index 9123c19e..a7e4c154 100644 --- a/function.cpp +++ b/function.cpp @@ -675,6 +675,12 @@ Ref<MediumLevelILFunction> Function::GetMediumLevelIL() const } +Ref<MediumLevelILFunction> Function::GetMappedMediumLevelIL() const +{ + return new MediumLevelILFunction(BNGetFunctionMappedMediumLevelIL(m_object)); +} + + Ref<MediumLevelILFunction> Function::GetMediumLevelILIfAvailable() const { BNMediumLevelILFunction* function = BNGetFunctionMediumLevelILIfAvailable(m_object); @@ -684,6 +690,15 @@ Ref<MediumLevelILFunction> Function::GetMediumLevelILIfAvailable() const } +Ref<MediumLevelILFunction> Function::GetMappedMediumLevelILIfAvailable() const +{ + BNMediumLevelILFunction* function = BNGetFunctionMappedMediumLevelILIfAvailable(m_object); + if (!function) + return nullptr; + return new MediumLevelILFunction(function); +} + + Ref<HighLevelILFunction> Function::GetHighLevelIL() const { return new HighLevelILFunction(BNGetFunctionHighLevelIL(m_object)); diff --git a/python/function.py b/python/function.py index 8bfd2405..e328fd04 100644 --- a/python/function.py +++ b/python/function.py @@ -878,6 +878,19 @@ class Function: return mediumlevelil.MediumLevelILFunction(self.arch, result, self) @property + def mmlil(self) -> 'mediumlevelil.MediumLevelILFunction': + """Function mapped medium level IL (read-only)""" + return mediumlevelil.MediumLevelILFunction(self.arch, core.BNGetFunctionMappedMediumLevelIL(self.handle), self) + + @property + def mmlil_if_available(self) -> Optional['mediumlevelil.MediumLevelILFunction']: + """Function mapped medium level IL, or None if not loaded (read-only)""" + result = core.BNGetFunctionMappedMediumLevelILIfAvailable(self.handle) + if not result: + return None + return mediumlevelil.MediumLevelILFunction(self.arch, result, self) + + @property def high_level_il(self) -> 'highlevelil.HighLevelILFunction': """Function high level IL (read-only)""" return highlevelil.HighLevelILFunction(self.arch, core.BNGetFunctionHighLevelIL(self.handle), self) diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index 1a710c85..d7903fb2 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -18,6 +18,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. +from abc import abstractmethod import ctypes import struct from typing import Optional, List, Union, Mapping, Generator, NewType, Tuple, ClassVar |
