Skip to content

Commit 6ec4685

Browse files
committed
[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.
1 parent 39bdc67 commit 6ec4685

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

rust/src/low_level_il/function.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ impl Ref<LowLevelILFunction<Mutable, NonSSA>> {
249249
}
250250
}
251251

252-
impl<M: FunctionMutability> Ref<LowLevelILFunction<M, SSA>> {
252+
impl<M: FunctionMutability> LowLevelILFunction<M, SSA> {
253253
/// Return a vector of all instructions that use the given SSA register.
254254
#[must_use]
255255
pub fn get_ssa_register_uses<R: ArchReg>(

rust/src/low_level_il/lifting.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,6 +1048,7 @@ impl LowLevelILMutableFunction {
10481048
no_arg_lifter!(bp, LLIL_BP, VoidExpr);
10491049

10501050
unsized_unary_op_lifter!(call, LLIL_CALL, VoidExpr);
1051+
unsized_unary_op_lifter!(tailcall, LLIL_TAILCALL, VoidExpr);
10511052
unsized_unary_op_lifter!(ret, LLIL_RET, VoidExpr);
10521053
unsized_unary_op_lifter!(jump, LLIL_JUMP, VoidExpr);
10531054
// TODO: LLIL_JUMP_TO

rust/src/variable.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,9 @@ pub enum PossibleValueSet {
654654
value: i64,
655655
},
656656
ReturnAddressValue,
657-
ImportedAddressValue,
657+
ImportedAddressValue {
658+
value: i64,
659+
},
658660
SignedRangeValue {
659661
value: i64,
660662
ranges: Vec<ValueRange<i64>>,
@@ -708,7 +710,9 @@ impl PossibleValueSet {
708710
},
709711
RegisterValueType::StackFrameOffset => Self::StackFrameOffset { value: value.value },
710712
RegisterValueType::ReturnAddressValue => Self::ReturnAddressValue,
711-
RegisterValueType::ImportedAddressValue => Self::ImportedAddressValue,
713+
RegisterValueType::ImportedAddressValue => {
714+
Self::ImportedAddressValue { value: value.value }
715+
}
712716
RegisterValueType::SignedRangeValue => {
713717
let raw_ranges = unsafe { std::slice::from_raw_parts(value.ranges, value.count) };
714718
Self::SignedRangeValue {
@@ -791,7 +795,9 @@ impl PossibleValueSet {
791795
raw.value = value;
792796
}
793797
PossibleValueSet::ReturnAddressValue => {}
794-
PossibleValueSet::ImportedAddressValue => {}
798+
PossibleValueSet::ImportedAddressValue { value } => {
799+
raw.value = value;
800+
}
795801
PossibleValueSet::SignedRangeValue { value, ranges } => {
796802
let boxed_raw_ranges: Box<[BNValueRange]> =
797803
ranges.into_iter().map(BNValueRange::from).collect();
@@ -884,7 +890,9 @@ impl PossibleValueSet {
884890
}
885891
PossibleValueSet::StackFrameOffset { .. } => RegisterValueType::StackFrameOffset,
886892
PossibleValueSet::ReturnAddressValue => RegisterValueType::ReturnAddressValue,
887-
PossibleValueSet::ImportedAddressValue => RegisterValueType::ImportedAddressValue,
893+
PossibleValueSet::ImportedAddressValue { .. } => {
894+
RegisterValueType::ImportedAddressValue
895+
}
888896
PossibleValueSet::SignedRangeValue { .. } => RegisterValueType::SignedRangeValue,
889897
PossibleValueSet::UnsignedRangeValue { .. } => RegisterValueType::UnsignedRangeValue,
890898
PossibleValueSet::LookupTableValue { .. } => RegisterValueType::LookupTableValue,

0 commit comments

Comments
 (0)