summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2022-01-20 13:16:29 -0500
committerPeter LaFosse <peter@vector35.com>2022-01-20 13:16:29 -0500
commit65c1ab279b34f11070a450de993886df9c7353ec (patch)
treefff31eaca0be83e034f9356465b02f7224ce47a2
parentb97912fbac14e760f1b595180ffe58af1ee34194 (diff)
Add support for mmlil_if_available
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h2
-rw-r--r--function.cpp15
-rw-r--r--python/function.py13
-rw-r--r--python/mediumlevelil.py1
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