diff options
| author | Josh Ferrell <josh@vector35.com> | 2023-01-14 16:01:59 -0500 |
|---|---|---|
| committer | Alexander Taylor <alex@vector35.com> | 2023-11-06 15:52:36 -0500 |
| commit | b270d7ebe1e2a406e1f7f14807987d24b0c4a846 (patch) | |
| tree | a75e7a0076e9c8d01be378f96aebcf483defa2f6 /function.cpp | |
| parent | 6262d76df45950bb75fb3a0bc5a1a45a5da00e00 (diff) | |
Allow setting UIDF on any mlil/hlil usage
Diffstat (limited to 'function.cpp')
| -rw-r--r-- | function.cpp | 74 |
1 files changed, 40 insertions, 34 deletions
diff --git a/function.cpp b/function.cpp index 298148b6..4ef91860 100644 --- a/function.cpp +++ b/function.cpp @@ -2497,26 +2497,29 @@ Ref<FlowGraph> Function::GetUnresolvedStackAdjustmentGraph() void Function::SetUserVariableValue(const Variable& var, uint64_t defAddr, PossibleValueSet& value) { - Ref<MediumLevelILFunction> mlil = GetMediumLevelIL(); - const set<size_t>& varDefs = mlil->GetVariableDefinitions(var); - if (varDefs.size() == 0) + if (var.index != 0) { - LogError("Could not get definition for Variable"); - return; - } - bool found = false; - for (auto& site : varDefs) - { - const MediumLevelILInstruction& instr = mlil->GetInstruction(site); - if (instr.address == defAddr) + Ref<MediumLevelILFunction> mlil = GetMediumLevelIL(); + const set<size_t>& varDefs = mlil->GetVariableDefinitions(var); + if (varDefs.size() == 0) { - found = true; - break; + LogError("Could not get definition for Variable"); + return; + } + bool found = false; + for (auto& site : varDefs) + { + const MediumLevelILInstruction& instr = mlil->GetInstruction(site); + if (instr.address == defAddr) + { + found = true; + break; + } + } + if (!found) + { + LogError("Could not find definition for variable at given address"); } - } - if (!found) - { - LogError("Could not find definition for variable at given address"); } auto defSite = BNArchitectureAndAddress(); defSite.arch = GetArchitecture()->m_object; @@ -2535,26 +2538,29 @@ void Function::SetUserVariableValue(const Variable& var, uint64_t defAddr, Possi void Function::ClearUserVariableValue(const Variable& var, uint64_t defAddr) { - Ref<MediumLevelILFunction> mlil = GetMediumLevelIL(); - const set<size_t>& varDefs = mlil->GetVariableDefinitions(var); - if (varDefs.size() == 0) + if (var.index != 0) { - LogError("Could not get definition for Variable"); - return; - } - bool found = false; - for (auto& site : varDefs) - { - const MediumLevelILInstruction& instr = mlil->GetInstruction(site); - if (instr.address == defAddr) + Ref<MediumLevelILFunction> mlil = GetMediumLevelIL(); + const set<size_t>& varDefs = mlil->GetVariableDefinitions(var); + if (varDefs.size() == 0) { - found = true; - break; + LogError("Could not get definition for Variable"); + return; + } + bool found = false; + for (auto& site : varDefs) + { + const MediumLevelILInstruction& instr = mlil->GetInstruction(site); + if (instr.address == defAddr) + { + found = true; + break; + } + } + if (!found) + { + LogError("Could not find definition for variable at given address"); } - } - if (!found) - { - LogError("Could not find definition for variable at given address"); } auto defSite = BNArchitectureAndAddress(); defSite.arch = GetArchitecture()->m_object; |
