Skip to content

Commit f8dcae5

Browse files
committed
Un-alias RegisterViewType
1 parent cb02af3 commit f8dcae5

File tree

4 files changed

+117
-30
lines changed

4 files changed

+117
-30
lines changed

rust/src/function.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1320,7 +1320,7 @@ impl Function {
13201320
// TODO: Adjust `BuiltinType`?
13211321
let mut builtin_type = BuiltinType::BuiltinNone;
13221322
let buffer = DataBuffer::from_raw(unsafe {
1323-
BNGetConstantData(self.handle, state, value, size, &mut builtin_type)
1323+
BNGetConstantData(self.handle, state.into(), value, size, &mut builtin_type)
13241324
});
13251325
(buffer, builtin_type)
13261326
}

rust/src/hlil/instruction.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -751,10 +751,7 @@ impl HighLevelILInstruction {
751751
constant_data: ConstantData::new(
752752
self.function.get_function(),
753753
RegisterValue {
754-
// TODO: Replace with a From<u32> for RegisterValueType.
755-
// TODO: We might also want to change the type of `op.constant_data_kind`
756-
// TODO: To RegisterValueType and do the conversion when creating instruction.
757-
state: unsafe { std::mem::transmute(op.constant_data_kind) },
754+
state: op.constant_data_kind.into(),
758755
value: op.constant_data_value,
759756
offset: 0,
760757
size: op.size,

rust/src/mlil/instruction.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -750,10 +750,7 @@ impl MediumLevelILInstruction {
750750
constant_data: ConstantData::new(
751751
self.function.get_function(),
752752
RegisterValue {
753-
// TODO: Replace with a From<u32> for RegisterValueType.
754-
// TODO: We might also want to change the type of `op.constant_data_kind`
755-
// TODO: To RegisterValueType and do the conversion when creating instruction.
756-
state: unsafe { std::mem::transmute(op.constant_data_kind) },
753+
state: op.constant_data_kind.into(),
757754
value: op.constant_data_value,
758755
offset: 0,
759756
size: op.size,

rust/src/variable.rs

Lines changed: 114 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use binaryninjacore_sys::{
1515
use std::collections::HashSet;
1616

1717
pub type VariableSourceType = BNVariableSourceType;
18-
pub type RegisterValueType = BNRegisterValueType;
1918

2019
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
2120
pub struct DataVariable {
@@ -514,7 +513,7 @@ impl RegisterValue {
514513
impl From<BNRegisterValue> for RegisterValue {
515514
fn from(value: BNRegisterValue) -> Self {
516515
Self {
517-
state: value.state,
516+
state: value.state.into(),
518517
value: value.value,
519518
offset: value.offset,
520519
size: value.size,
@@ -525,14 +524,108 @@ impl From<BNRegisterValue> for RegisterValue {
525524
impl From<RegisterValue> for BNRegisterValue {
526525
fn from(value: RegisterValue) -> Self {
527526
Self {
528-
state: value.state,
527+
state: value.state.into(),
529528
value: value.value,
530529
offset: value.offset,
531530
size: value.size,
532531
}
533532
}
534533
}
535534

535+
#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq)]
536+
pub enum RegisterValueType {
537+
UndeterminedValue = 0,
538+
EntryValue = 1,
539+
ConstantValue = 2,
540+
ConstantPointerValue = 3,
541+
ExternalPointerValue = 4,
542+
StackFrameOffset = 5,
543+
ReturnAddressValue = 6,
544+
ImportedAddressValue = 7,
545+
SignedRangeValue = 8,
546+
UnsignedRangeValue = 9,
547+
LookupTableValue = 10,
548+
InSetOfValues = 11,
549+
NotInSetOfValues = 12,
550+
ConstantDataValue = 32768,
551+
ConstantDataZeroExtendValue = 32769,
552+
ConstantDataSignExtendValue = 32770,
553+
ConstantDataAggregateValue = 32771,
554+
}
555+
556+
impl From<u32> for RegisterValueType {
557+
fn from(value: u32) -> Self {
558+
match value {
559+
0 => Self::UndeterminedValue,
560+
1 => Self::EntryValue,
561+
2 => Self::ConstantValue,
562+
3 => Self::ConstantPointerValue,
563+
4 => Self::ExternalPointerValue,
564+
5 => Self::StackFrameOffset,
565+
6 => Self::ReturnAddressValue,
566+
7 => Self::ImportedAddressValue,
567+
8 => Self::SignedRangeValue,
568+
9 => Self::UnsignedRangeValue,
569+
10 => Self::LookupTableValue,
570+
11 => Self::InSetOfValues,
571+
12 => Self::NotInSetOfValues,
572+
32768 => Self::ConstantDataValue,
573+
32769 => Self::ConstantDataZeroExtendValue,
574+
32770 => Self::ConstantDataSignExtendValue,
575+
32771 => Self::ConstantDataAggregateValue,
576+
_ => unreachable!(),
577+
}
578+
}
579+
}
580+
581+
impl From<BNRegisterValueType> for RegisterValueType {
582+
fn from(value: BNRegisterValueType) -> Self {
583+
match value {
584+
BNRegisterValueType::UndeterminedValue => Self::UndeterminedValue,
585+
BNRegisterValueType::EntryValue => Self::EntryValue,
586+
BNRegisterValueType::ConstantValue => Self::ConstantValue,
587+
BNRegisterValueType::ConstantPointerValue => Self::ConstantPointerValue,
588+
BNRegisterValueType::ExternalPointerValue => Self::ExternalPointerValue,
589+
BNRegisterValueType::StackFrameOffset => Self::StackFrameOffset,
590+
BNRegisterValueType::ReturnAddressValue => Self::ReturnAddressValue,
591+
BNRegisterValueType::ImportedAddressValue => Self::ImportedAddressValue,
592+
BNRegisterValueType::SignedRangeValue => Self::SignedRangeValue,
593+
BNRegisterValueType::UnsignedRangeValue => Self::UnsignedRangeValue,
594+
BNRegisterValueType::LookupTableValue => Self::LookupTableValue,
595+
BNRegisterValueType::InSetOfValues => Self::InSetOfValues,
596+
BNRegisterValueType::NotInSetOfValues => Self::NotInSetOfValues,
597+
BNRegisterValueType::ConstantDataValue => Self::ConstantDataValue,
598+
BNRegisterValueType::ConstantDataZeroExtendValue => Self::ConstantDataZeroExtendValue,
599+
BNRegisterValueType::ConstantDataSignExtendValue => Self::ConstantDataSignExtendValue,
600+
BNRegisterValueType::ConstantDataAggregateValue => Self::ConstantDataAggregateValue,
601+
}
602+
}
603+
}
604+
605+
impl From<RegisterValueType> for BNRegisterValueType {
606+
fn from(value: RegisterValueType) -> Self {
607+
match value {
608+
RegisterValueType::UndeterminedValue => Self::UndeterminedValue,
609+
RegisterValueType::EntryValue => Self::EntryValue,
610+
RegisterValueType::ConstantValue => Self::ConstantValue,
611+
RegisterValueType::ConstantPointerValue => Self::ConstantPointerValue,
612+
RegisterValueType::ExternalPointerValue => Self::ExternalPointerValue,
613+
RegisterValueType::StackFrameOffset => Self::StackFrameOffset,
614+
RegisterValueType::ReturnAddressValue => Self::ReturnAddressValue,
615+
RegisterValueType::ImportedAddressValue => Self::ImportedAddressValue,
616+
RegisterValueType::SignedRangeValue => Self::SignedRangeValue,
617+
RegisterValueType::UnsignedRangeValue => Self::UnsignedRangeValue,
618+
RegisterValueType::LookupTableValue => Self::LookupTableValue,
619+
RegisterValueType::InSetOfValues => Self::InSetOfValues,
620+
RegisterValueType::NotInSetOfValues => Self::NotInSetOfValues,
621+
RegisterValueType::ConstantDataValue => Self::ConstantDataValue,
622+
RegisterValueType::ConstantDataZeroExtendValue => Self::ConstantDataZeroExtendValue,
623+
RegisterValueType::ConstantDataSignExtendValue => Self::ConstantDataSignExtendValue,
624+
RegisterValueType::ConstantDataAggregateValue => Self::ConstantDataAggregateValue,
625+
}
626+
}
627+
}
628+
536629
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
537630
pub struct ValueRange<T> {
538631
pub start: T,
@@ -703,64 +796,64 @@ impl PossibleValueSet {
703796
impl From<BNPossibleValueSet> for PossibleValueSet {
704797
fn from(value: BNPossibleValueSet) -> Self {
705798
match value.state {
706-
RegisterValueType::UndeterminedValue => Self::UndeterminedValue,
707-
RegisterValueType::EntryValue => Self::EntryValue { reg: value.value },
708-
RegisterValueType::ConstantValue => Self::ConstantValue { value: value.value },
709-
RegisterValueType::ConstantPointerValue => {
799+
BNRegisterValueType::UndeterminedValue => Self::UndeterminedValue,
800+
BNRegisterValueType::EntryValue => Self::EntryValue { reg: value.value },
801+
BNRegisterValueType::ConstantValue => Self::ConstantValue { value: value.value },
802+
BNRegisterValueType::ConstantPointerValue => {
710803
Self::ConstantPointerValue { value: value.value }
711804
}
712-
RegisterValueType::ExternalPointerValue => Self::ExternalPointerValue {
805+
BNRegisterValueType::ExternalPointerValue => Self::ExternalPointerValue {
713806
value: value.value,
714807
offset: value.offset,
715808
},
716-
RegisterValueType::StackFrameOffset => Self::StackFrameOffset { value: value.value },
717-
RegisterValueType::ReturnAddressValue => Self::ReturnAddressValue,
718-
RegisterValueType::ImportedAddressValue => Self::ImportedAddressValue,
719-
RegisterValueType::SignedRangeValue => {
809+
BNRegisterValueType::StackFrameOffset => Self::StackFrameOffset { value: value.value },
810+
BNRegisterValueType::ReturnAddressValue => Self::ReturnAddressValue,
811+
BNRegisterValueType::ImportedAddressValue => Self::ImportedAddressValue,
812+
BNRegisterValueType::SignedRangeValue => {
720813
let raw_ranges = unsafe { std::slice::from_raw_parts(value.ranges, value.count) };
721814
Self::SignedRangeValue {
722815
value: value.value,
723816
ranges: raw_ranges.iter().map(|&r| r.into()).collect(),
724817
}
725818
}
726-
RegisterValueType::UnsignedRangeValue => {
819+
BNRegisterValueType::UnsignedRangeValue => {
727820
let raw_ranges = unsafe { std::slice::from_raw_parts(value.ranges, value.count) };
728821
Self::UnsignedRangeValue {
729822
value: value.value,
730823
ranges: raw_ranges.iter().map(|&r| r.into()).collect(),
731824
}
732825
}
733-
RegisterValueType::LookupTableValue => {
826+
BNRegisterValueType::LookupTableValue => {
734827
let raw_entries = unsafe { std::slice::from_raw_parts(value.table, value.count) };
735828
Self::LookupTableValue {
736829
table: raw_entries.iter().map(|&r| r.into()).collect(),
737830
}
738831
}
739-
RegisterValueType::InSetOfValues => {
832+
BNRegisterValueType::InSetOfValues => {
740833
let raw_values = unsafe { std::slice::from_raw_parts(value.valueSet, value.count) };
741834
Self::InSetOfValues {
742835
values: raw_values.iter().copied().collect(),
743836
}
744837
}
745-
RegisterValueType::NotInSetOfValues => {
838+
BNRegisterValueType::NotInSetOfValues => {
746839
let raw_values = unsafe { std::slice::from_raw_parts(value.valueSet, value.count) };
747840
Self::NotInSetOfValues {
748841
values: raw_values.iter().copied().collect(),
749842
}
750843
}
751-
RegisterValueType::ConstantDataValue => Self::ConstantDataValue {
844+
BNRegisterValueType::ConstantDataValue => Self::ConstantDataValue {
752845
value: value.value,
753846
size: value.size,
754847
},
755-
RegisterValueType::ConstantDataZeroExtendValue => Self::ConstantDataZeroExtendValue {
848+
BNRegisterValueType::ConstantDataZeroExtendValue => Self::ConstantDataZeroExtendValue {
756849
value: value.value,
757850
size: value.size,
758851
},
759-
RegisterValueType::ConstantDataSignExtendValue => Self::ConstantDataSignExtendValue {
852+
BNRegisterValueType::ConstantDataSignExtendValue => Self::ConstantDataSignExtendValue {
760853
value: value.value,
761854
size: value.size,
762855
},
763-
RegisterValueType::ConstantDataAggregateValue => Self::ConstantDataAggregateValue {
856+
BNRegisterValueType::ConstantDataAggregateValue => Self::ConstantDataAggregateValue {
764857
value: value.value,
765858
size: value.size,
766859
},
@@ -772,7 +865,7 @@ impl From<BNPossibleValueSet> for PossibleValueSet {
772865
impl From<PossibleValueSet> for BNPossibleValueSet {
773866
fn from(value: PossibleValueSet) -> Self {
774867
let mut raw = BNPossibleValueSet {
775-
state: value.value_type(),
868+
state: value.value_type().into(),
776869
..Default::default()
777870
};
778871
match value {

0 commit comments

Comments
 (0)