diff options
| author | Mark Rowe <mark@vector35.com> | 2025-08-11 10:42:07 -0700 |
|---|---|---|
| committer | Mark Rowe <mark@vector35.com> | 2025-08-27 15:59:48 -0700 |
| commit | b302d7ba796f41b1102ee61feed8b8e212299997 (patch) | |
| tree | 722583a526fa821d7592e38efabb79cb9853e8a9 /rust | |
| parent | 28ff277a2a7693d5a9ab1929bc459049c2e52b27 (diff) | |
[Rust] Fix a couple of oversights in the API
1. Some SSA-specific functions are now implemented on
`LowLevelILFunction<M, SSA>` rather than `Ref<LowLevelILFunction<M, SSA>>`.
2. A lifting helper for `LLIL_TAILCALL` is added to `LowLevelILFunction`.
3. `PossibleValueSet::ImportedAddressValue` now holds the value.
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/src/low_level_il/function.rs | 2 | ||||
| -rw-r--r-- | rust/src/low_level_il/lifting.rs | 1 | ||||
| -rw-r--r-- | rust/src/variable.rs | 16 |
3 files changed, 14 insertions, 5 deletions
diff --git a/rust/src/low_level_il/function.rs b/rust/src/low_level_il/function.rs index 177b2a1a..65c3536a 100644 --- a/rust/src/low_level_il/function.rs +++ b/rust/src/low_level_il/function.rs @@ -249,7 +249,7 @@ impl Ref<LowLevelILFunction<Mutable, NonSSA>> { } } -impl<M: FunctionMutability> Ref<LowLevelILFunction<M, SSA>> { +impl<M: FunctionMutability> LowLevelILFunction<M, SSA> { /// Return a vector of all instructions that use the given SSA register. #[must_use] pub fn get_ssa_register_uses<R: ArchReg>( diff --git a/rust/src/low_level_il/lifting.rs b/rust/src/low_level_il/lifting.rs index f2850776..a51cd3d5 100644 --- a/rust/src/low_level_il/lifting.rs +++ b/rust/src/low_level_il/lifting.rs @@ -1048,6 +1048,7 @@ impl LowLevelILMutableFunction { no_arg_lifter!(bp, LLIL_BP, VoidExpr); unsized_unary_op_lifter!(call, LLIL_CALL, VoidExpr); + unsized_unary_op_lifter!(tailcall, LLIL_TAILCALL, VoidExpr); unsized_unary_op_lifter!(ret, LLIL_RET, VoidExpr); unsized_unary_op_lifter!(jump, LLIL_JUMP, VoidExpr); // TODO: LLIL_JUMP_TO diff --git a/rust/src/variable.rs b/rust/src/variable.rs index 7e32727a..fc6febfb 100644 --- a/rust/src/variable.rs +++ b/rust/src/variable.rs @@ -654,7 +654,9 @@ pub enum PossibleValueSet { value: i64, }, ReturnAddressValue, - ImportedAddressValue, + ImportedAddressValue { + value: i64, + }, SignedRangeValue { value: i64, ranges: Vec<ValueRange<i64>>, @@ -708,7 +710,9 @@ impl PossibleValueSet { }, RegisterValueType::StackFrameOffset => Self::StackFrameOffset { value: value.value }, RegisterValueType::ReturnAddressValue => Self::ReturnAddressValue, - RegisterValueType::ImportedAddressValue => Self::ImportedAddressValue, + RegisterValueType::ImportedAddressValue => { + Self::ImportedAddressValue { value: value.value } + } RegisterValueType::SignedRangeValue => { let raw_ranges = unsafe { std::slice::from_raw_parts(value.ranges, value.count) }; Self::SignedRangeValue { @@ -791,7 +795,9 @@ impl PossibleValueSet { raw.value = value; } PossibleValueSet::ReturnAddressValue => {} - PossibleValueSet::ImportedAddressValue => {} + PossibleValueSet::ImportedAddressValue { value } => { + raw.value = value; + } PossibleValueSet::SignedRangeValue { value, ranges } => { let boxed_raw_ranges: Box<[BNValueRange]> = ranges.into_iter().map(BNValueRange::from).collect(); @@ -884,7 +890,9 @@ impl PossibleValueSet { } PossibleValueSet::StackFrameOffset { .. } => RegisterValueType::StackFrameOffset, PossibleValueSet::ReturnAddressValue => RegisterValueType::ReturnAddressValue, - PossibleValueSet::ImportedAddressValue => RegisterValueType::ImportedAddressValue, + PossibleValueSet::ImportedAddressValue { .. } => { + RegisterValueType::ImportedAddressValue + } PossibleValueSet::SignedRangeValue { .. } => RegisterValueType::SignedRangeValue, PossibleValueSet::UnsignedRangeValue { .. } => RegisterValueType::UnsignedRangeValue, PossibleValueSet::LookupTableValue { .. } => RegisterValueType::LookupTableValue, |
