summaryrefslogtreecommitdiff
path: root/function.cpp
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2023-01-14 16:01:59 -0500
committerAlexander Taylor <alex@vector35.com>2023-11-06 15:52:36 -0500
commitb270d7ebe1e2a406e1f7f14807987d24b0c4a846 (patch)
treea75e7a0076e9c8d01be378f96aebcf483defa2f6 /function.cpp
parent6262d76df45950bb75fb3a0bc5a1a45a5da00e00 (diff)
Allow setting UIDF on any mlil/hlil usage
Diffstat (limited to 'function.cpp')
-rw-r--r--function.cpp74
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;