Skip to content

Commit af6b91b

Browse files
committed
This is just a hack so i could see what it looks like for the svd loader
1 parent ec66ae3 commit af6b91b

File tree

13 files changed

+73
-21
lines changed

13 files changed

+73
-21
lines changed

binaryninjaapi.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9523,6 +9523,7 @@ namespace BinaryNinja {
95239523
uint64_t offset;
95249524
BNMemberAccess access;
95259525
BNMemberScope scope;
9526+
std::string description;
95269527
};
95279528

95289529
/*!
@@ -9763,7 +9764,7 @@ namespace BinaryNinja {
97639764
\return reference to the Structure Builder
97649765
*/
97659766
StructureBuilder& AddMember(const Confidence<Ref<Type>>& type, const std::string& name,
9766-
BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope);
9767+
BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope, const std::string& description = "");
97679768

97689769
/*! AddMemberAtOffset adds a member at a specific offset within the struct
97699770

@@ -9776,7 +9777,7 @@ namespace BinaryNinja {
97769777
\return Reference to the StructureBuilder
97779778
*/
97789779
StructureBuilder& AddMemberAtOffset(const Confidence<Ref<Type>>& type, const std::string& name, uint64_t offset,
9779-
bool overwriteExisting = true, BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope);
9780+
bool overwriteExisting = true, BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope, const std::string& description = "");
97809781

97819782
/*! RemoveMember removes a member at a specified index
97829783

binaryninjacore.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,7 @@ extern "C"
17881788
UndefinedXrefLineType,
17891789
CollapsedPaddingLineType,
17901790
EmptyLineType,
1791+
DescriptionLineType,
17911792
} BNTypeDefinitionLineType;
17921793

17931794
typedef struct BNTypeDefinitionLine
@@ -2341,6 +2342,7 @@ extern "C"
23412342
uint8_t typeConfidence;
23422343
BNMemberAccess access;
23432344
BNMemberScope scope;
2345+
char* description;
23442346
} BNStructureMember;
23452347

23462348
typedef struct BNInheritedStructureMember
@@ -6549,10 +6551,10 @@ extern "C"
65496551
BNStructureBuilder* s, BNBaseStructure* bases, size_t count);
65506552

65516553
BINARYNINJACOREAPI void BNAddStructureBuilderMember(BNStructureBuilder* s, const BNTypeWithConfidence* const type,
6552-
const char* name, BNMemberAccess access, BNMemberScope scope);
6554+
const char* name, BNMemberAccess access, BNMemberScope scope, const char* description);
65536555
BINARYNINJACOREAPI void BNAddStructureBuilderMemberAtOffset(BNStructureBuilder* s,
65546556
const BNTypeWithConfidence* const type, const char* name, uint64_t offset, bool overwriteExisting,
6555-
BNMemberAccess access, BNMemberScope scope);
6557+
BNMemberAccess access, BNMemberScope scope, const char* description);
65566558
BINARYNINJACOREAPI void BNRemoveStructureBuilderMember(BNStructureBuilder* s, size_t idx);
65576559
BINARYNINJACOREAPI void BNReplaceStructureBuilderMember(BNStructureBuilder* s, size_t idx,
65586560
const BNTypeWithConfidence* const type, const char* name, bool overwriteExisting);

plugins/dwarf/dwarf_import/src/types.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,15 @@ fn do_structure_parse<R: ReaderType>(
214214
false,
215215
MemberAccess::NoAccess, // TODO : Resolve actual scopes, if possible
216216
MemberScope::NoScope,
217+
""
217218
);
218219
} else {
219220
structure_builder.append(
220221
child_type.as_ref(),
221222
child_name,
222223
MemberAccess::NoAccess,
223224
MemberScope::NoScope,
225+
""
224226
);
225227
}
226228
}

plugins/idb_import/src/types.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
335335
format!("bitfield_{}_{}", offset + start_idx, offset + (i - 1))
336336
};
337337
let field = field_from_bytes(bytes);
338-
struct_builder.append(&field, name, MemberAccess::NoAccess, MemberScope::NoScope);
338+
struct_builder.append(&field, name, MemberAccess::NoAccess, MemberScope::NoScope, "");
339339
};
340340

341341
for (i, member) in members {
@@ -423,7 +423,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
423423
.as_ref()
424424
.map(|name| name.as_utf8_lossy().to_string())
425425
.unwrap_or_else(|| format!("member_{i}"));
426-
structure.append(&mem, name, MemberAccess::NoAccess, MemberScope::NoScope);
426+
structure.append(&mem, name, MemberAccess::NoAccess, MemberScope::NoScope, "");
427427
}
428428
if let Some(start_idx) = first_bitfield_seq {
429429
let members_bitrange = &ty_struct.members[start_idx..];
@@ -470,7 +470,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
470470
.as_ref()
471471
.map(|name| name.as_utf8_lossy().to_string())
472472
.unwrap_or_else(|| format!("member_{i}"));
473-
structure.append(&mem, name, MemberAccess::NoAccess, MemberScope::NoScope);
473+
structure.append(&mem, name, MemberAccess::NoAccess, MemberScope::NoScope, "");
474474
}
475475
let str_ref = structure.finalize();
476476

plugins/pdb-ng/src/struct_grouper.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ pub fn group_structure(
366366
false,
367367
member.access,
368368
member.scope,
369+
""
369370
);
370371
}
371372
}
@@ -395,6 +396,7 @@ fn apply_groups(
395396
false,
396397
member.access,
397398
member.scope,
399+
""
398400
);
399401
} else {
400402
structure.insert(
@@ -404,6 +406,7 @@ fn apply_groups(
404406
false,
405407
member.access,
406408
member.scope,
409+
""
407410
);
408411
}
409412
}
@@ -417,6 +420,7 @@ fn apply_groups(
417420
false,
418421
MemberAccess::PublicAccess,
419422
MemberScope::NoScope,
423+
""
420424
);
421425
}
422426
ResolvedGroup::Union(inner_offset, children) => {
@@ -430,6 +434,7 @@ fn apply_groups(
430434
false,
431435
MemberAccess::PublicAccess,
432436
MemberScope::NoScope,
437+
""
433438
);
434439
}
435440
}

plugins/pdb-ng/src/type_parser.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
898898
bitfield_builder
899899
.as_mut()
900900
.expect("Invariant")
901-
.insert(&m.ty, m.name, 0, false, m.access, m.scope);
901+
.insert(&m.ty, m.name, 0, false, m.access, m.scope, "");
902902
}
903903
(None, None) => {
904904
if let Some(mut builder) = bitfield_builder.take() {
@@ -1108,6 +1108,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
11081108
true,
11091109
MemberAccess::PublicAccess,
11101110
MemberScope::NoScope,
1111+
""
11111112
);
11121113
min_width = min_width.max((offset + self.arch.address_size()) as u64);
11131114
}
@@ -1139,6 +1140,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
11391140
true,
11401141
MemberAccess::PublicAccess,
11411142
MemberScope::NoScope,
1143+
""
11421144
);
11431145
}
11441146

@@ -1403,6 +1405,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
14031405
base_offset as u64,
14041406
access,
14051407
scope,
1408+
"".to_string()
14061409
),
14071410
))))
14081411
}
@@ -1809,6 +1812,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
18091812
false,
18101813
group[0].access,
18111814
group[0].scope,
1815+
""
18121816
);
18131817
} else {
18141818
let mut inner_struct = StructureBuilder::new();
@@ -1820,6 +1824,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
18201824
false,
18211825
member.access,
18221826
member.scope,
1827+
""
18231828
);
18241829
}
18251830
structure.insert(
@@ -1832,6 +1837,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
18321837
false,
18331838
MemberAccess::PublicAccess,
18341839
MemberScope::NoScope,
1840+
""
18351841
);
18361842
}
18371843
}

plugins/svd/src/mapper.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ impl DeviceMapper {
323323
register.address_offset as u64,
324324
MemberAccess::PublicAccess,
325325
MemberScope::NoScope,
326+
register.description.clone().unwrap_or_default()
326327
)
327328
}
328329

@@ -444,6 +445,7 @@ impl DeviceMapper {
444445
byte_offset as u64,
445446
MemberAccess::PublicAccess,
446447
MemberScope::NoScope,
448+
field.description.clone().unwrap_or_default()
447449
)
448450
}
449451

plugins/warp/src/convert.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ pub fn to_bn_type<A: BNArchitecture>(arch: &A, ty: &Type) -> BNRef<BNType> {
461461
member_offset,
462462
member_access,
463463
member_scope,
464+
"".to_string()
464465
),
465466
false,
466467
);
@@ -499,6 +500,7 @@ pub fn to_bn_type<A: BNArchitecture>(arch: &A, ty: &Type) -> BNRef<BNType> {
499500
0, // Union members all exist at 0 right?
500501
member_access,
501502
member_scope,
503+
"".to_string()
502504
);
503505
builder.insert_member(structure_member, false);
504506
}

python/types.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,7 @@ class StructureMember:
12821282
offset: int
12831283
access: MemberAccess = MemberAccess.NoAccess
12841284
scope: MemberScope = MemberScope.NoScope
1285+
description: Optional[str] = None
12851286

12861287
def __repr__(self):
12871288
if len(self.name) == 0:
@@ -1366,7 +1367,7 @@ def _add_members_to_builder(structure_builder_handle, members: Optional[MembersT
13661367
elif isinstance(member, StructureMember):
13671368
core.BNAddStructureBuilderMemberAtOffset(
13681369
structure_builder_handle, member.type._to_core_struct(), member.name, member.offset, False,
1369-
member.access, member.scope
1370+
member.access, member.scope, member.description
13701371
)
13711372
elif isinstance(member, (TypeBuilder, Type)):
13721373
core.BNAddStructureBuilderMember(
@@ -1414,7 +1415,7 @@ def members(self) -> List[StructureMember]:
14141415
result.append(
14151416
StructureMember(
14161417
t, members[i].name, members[i].offset, MemberAccess(members[i].access),
1417-
MemberScope(members[i].scope)
1418+
MemberScope(members[i].scope), members[i].description
14181419
)
14191420
)
14201421
return result
@@ -1510,7 +1511,7 @@ def __getitem__(self, name: str) -> Optional[StructureMember]:
15101511
return StructureMember(
15111512
Type.create(core.BNNewTypeReference(member.contents.type), confidence=member.contents.typeConfidence),
15121513
member.contents.name, member.contents.offset, MemberAccess(member.contents.access),
1513-
MemberScope(member.contents.scope)
1514+
MemberScope(member.contents.scope), member.contents.description
15141515
)
15151516
finally:
15161517
core.BNFreeStructureMember(member)
@@ -2542,7 +2543,7 @@ def __getitem__(self, name: str) -> StructureMember:
25422543
return StructureMember(
25432544
Type.create(core.BNNewTypeReference(member.contents.type), confidence=member.contents.typeConfidence),
25442545
member.contents.name, member.contents.offset, MemberAccess(member.contents.access),
2545-
MemberScope(member.contents.scope)
2546+
MemberScope(member.contents.scope), member.contents.description
25462547
)
25472548
finally:
25482549
if member is not None:
@@ -2557,7 +2558,7 @@ def member_at_offset(self, offset: int) -> StructureMember:
25572558
return StructureMember(
25582559
Type.create(core.BNNewTypeReference(member.contents.type), confidence=member.contents.typeConfidence),
25592560
member.contents.name, member.contents.offset, MemberAccess(member.contents.access),
2560-
MemberScope(member.contents.scope)
2561+
MemberScope(member.contents.scope), member.contents.description
25612562
)
25622563
finally:
25632564
core.BNFreeStructureMember(member)
@@ -2575,7 +2576,7 @@ def members(self):
25752576
StructureMember(
25762577
Type.create(core.BNNewTypeReference(members[i].type), confidence=members[i].typeConfidence),
25772578
members[i].name, members[i].offset, MemberAccess(members[i].access),
2578-
MemberScope(members[i].scope)
2579+
MemberScope(members[i].scope), members[i].description
25792580
)
25802581
)
25812582
finally:
@@ -2658,7 +2659,7 @@ def members_including_inherited(self, view: Union['binaryview.BinaryView', 'type
26582659
StructureMember(
26592660
Type.create(core.BNNewTypeReference(members[i].member.type), confidence=members[i].member.typeConfidence),
26602661
members[i].member.name, members[i].member.offset, MemberAccess(members[i].member.access),
2661-
MemberScope(members[i].member.scope)
2662+
MemberScope(members[i].member.scope), members[i].member.description
26622663
),
26632664
members[i].memberIndex
26642665
)
@@ -2690,7 +2691,7 @@ def member_at_offset_including_inherited(self, view: 'binaryview.BinaryView', of
26902691
StructureMember(
26912692
Type.create(core.BNNewTypeReference(member[0].member.type), confidence=member[0].member.typeConfidence),
26922693
member[0].member.name, member[0].member.offset, MemberAccess(member[0].member.access),
2693-
MemberScope(member[0].member.scope)
2694+
MemberScope(member[0].member.scope), member[0].member.description,
26942695
),
26952696
member[0].memberIndex
26962697
)
@@ -2741,7 +2742,7 @@ def resolve_member_callback(
27412742
resolved_struct = StructureType.from_core_struct(core.BNNewStructureReference(resolved_struct))
27422743
t = Type.create(core.BNNewTypeReference(member.type), confidence=member.typeConfidence)
27432744
struct_member = StructureMember(
2744-
t, member.name, member.offset, MemberAccess(member.access), MemberScope(member.scope)
2745+
t, member.name, member.offset, MemberAccess(member.access), MemberScope(member.scope), member.description
27452746
)
27462747
resolve_func(base_name, resolved_struct, member_index, struct_offset, adjusted_offset, struct_member)
27472748

rust/examples/type_printer.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ fn main() {
2222
0,
2323
MemberAccess::PublicAccess,
2424
MemberScope::NoScope,
25+
"".to_string()
2526
),
2627
false,
2728
)

0 commit comments

Comments
 (0)