diff options
Diffstat (limited to 'highlevelilinstruction.cpp')
| -rw-r--r-- | highlevelilinstruction.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/highlevelilinstruction.cpp b/highlevelilinstruction.cpp index 5f8777e1..ecec3869 100644 --- a/highlevelilinstruction.cpp +++ b/highlevelilinstruction.cpp @@ -18,6 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. +#include <string.h> #ifdef BINARYNINJACORE_LIBRARY #include "highlevelilfunction.h" #include "highlevelilssafunction.h" @@ -883,6 +884,47 @@ MediumLevelILInstruction HighLevelILInstructionBase::GetMediumLevelILSSAForm() c } +char* HighLevelILInstructionBase::Dump() const +{ + if (!function) + return strdup("<uninit>"); + + vector<InstructionTextToken> tokens; + vector<DisassemblyTextLine> lines = function->GetExprText(*this, new DisassemblySettings()); + if (!lines.empty()) + { + string text; + if (exprIndex != BN_INVALID_EXPR && (exprIndex & 0xffff000000000000) == 0) + { + text += "[expr " + to_string(exprIndex) + "] "; + } + if (instructionIndex != BN_INVALID_EXPR && (instructionIndex & 0xffff000000000000) == 0) + { + text += "[instr " + to_string(instructionIndex) + "] "; + } + Ref<Type> type = GetType(); + if (type) + { + text += "[type: " + type->GetString() + "] "; + } + + for (auto& line: lines) + { + for (auto& token: line.tokens) + { + text += token.text; + } + text += " ; "; + } + return strdup(text.c_str()); + } + else + { + return strdup("???"); + } +} + + void HighLevelILInstructionBase::Replace(ExprId expr) { function->ReplaceExpr(exprIndex, expr); |
