diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/llil_parser/src/llil_parser.cpp | 8 | ||||
| -rw-r--r-- | examples/mlil_parser/src/mlil_parser.cpp | 19 |
2 files changed, 18 insertions, 9 deletions
diff --git a/examples/llil_parser/src/llil_parser.cpp b/examples/llil_parser/src/llil_parser.cpp index 9b73d298..982593a9 100644 --- a/examples/llil_parser/src/llil_parser.cpp +++ b/examples/llil_parser/src/llil_parser.cpp @@ -56,6 +56,7 @@ static void PrintOperation(BNLowLevelILOperation operation) ENUM_PRINTER(LLIL_REG) ENUM_PRINTER(LLIL_CONST) ENUM_PRINTER(LLIL_CONST_PTR) + ENUM_PRINTER(LLIL_EXTERN_PTR) ENUM_PRINTER(LLIL_FLAG) ENUM_PRINTER(LLIL_FLAG_BIT) ENUM_PRINTER(LLIL_ADD) @@ -378,6 +379,7 @@ int main(int argc, char *argv[]) { case LLIL_CONST: case LLIL_CONST_PTR: + case LLIL_EXTERN_PTR: printf(" Found constant 0x%" PRIx64 "\n", expr.GetConstant()); return false; // Done parsing this default: @@ -397,6 +399,12 @@ int main(int argc, char *argv[]) expr.GetSourceExpr<LLIL_LOAD>().GetConstant<LLIL_CONST_PTR>()); return false; // Done parsing this } + else if (expr.GetSourceExpr<LLIL_LOAD>().operation == LLIL_EXTERN_PTR) + { + printf(" Loading from address 0x%" PRIx64 "\n", + expr.GetSourceExpr<LLIL_LOAD>().GetConstant<LLIL_EXTERN_PTR>()); + return false; // Done parsing this + } break; default: break; diff --git a/examples/mlil_parser/src/mlil_parser.cpp b/examples/mlil_parser/src/mlil_parser.cpp index 0e621ead..a9411251 100644 --- a/examples/mlil_parser/src/mlil_parser.cpp +++ b/examples/mlil_parser/src/mlil_parser.cpp @@ -59,6 +59,7 @@ static void PrintOperation(BNMediumLevelILOperation operation) ENUM_PRINTER(MLIL_ADDRESS_OF_FIELD) ENUM_PRINTER(MLIL_CONST) ENUM_PRINTER(MLIL_CONST_PTR) + ENUM_PRINTER(MLIL_EXTERN_PTR) ENUM_PRINTER(MLIL_ADD) ENUM_PRINTER(MLIL_ADC) ENUM_PRINTER(MLIL_SUB) @@ -322,16 +323,10 @@ int main(int argc, char *argv[]) // Example of using visitors to find all constants in the instruction instr.VisitExprs([&](const MediumLevelILInstruction& expr) { - switch (expr.operation) - { - case MLIL_CONST: - case MLIL_CONST_PTR: + bool status = MediumLevelILFunction::IsConstantType(expr.operation); + if (status) printf(" Found constant 0x%" PRIx64 "\n", expr.GetConstant()); - return false; // Done parsing this - default: - break; - } - return true; // Parse any subexpressions + return !status; }); // Example of using the templated accessors for efficiently parsing load instructions @@ -345,6 +340,12 @@ int main(int argc, char *argv[]) expr.GetSourceExpr<MLIL_LOAD>().GetConstant<MLIL_CONST_PTR>()); return false; // Done parsing this } + else if (expr.GetSourceExpr<MLIL_LOAD>().operation == MLIL_EXTERN_PTR) + { + printf(" Loading from address 0x%" PRIx64 "\n", + expr.GetSourceExpr<MLIL_LOAD>().GetConstant<MLIL_EXTERN_PTR>()); + return false; // Done parsing this + } break; default: break; |
