summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorMark Rowe <mark@vector35.com>2025-08-11 10:42:07 -0700
committerMark Rowe <mark@vector35.com>2025-08-27 15:59:48 -0700
commitb302d7ba796f41b1102ee61feed8b8e212299997 (patch)
tree722583a526fa821d7592e38efabb79cb9853e8a9 /rust
parent28ff277a2a7693d5a9ab1929bc459049c2e52b27 (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.rs2
-rw-r--r--rust/src/low_level_il/lifting.rs1
-rw-r--r--rust/src/variable.rs16
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,