MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / apply_groups

Function apply_groups

plugins/pdb-ng/src/struct_grouper.rs:377–437  ·  view source on GitHub ↗
(
    members: &Vec<ParsedMember>,
    structure: &mut StructureBuilder,
    groups: Vec<ResolvedGroup>,
    offset: u64,
)

Source from the content-addressed store, hash-verified

375}
376
377fn apply_groups(
378 members: &Vec<ParsedMember>,
379 structure: &mut StructureBuilder,
380 groups: Vec<ResolvedGroup>,
381 offset: u64,
382) {
383 for (i, group) in groups.into_iter().enumerate() {
384 match group {
385 ResolvedGroup::Single(index) => {
386 let member = &members[index];
387
388 // TODO : Fix inner-offset being larger than `member.offset`
389
390 if offset > member.offset {
391 structure.insert(
392 &member.ty,
393 member.name.clone(),
394 0,
395 false,
396 member.access,
397 member.scope,
398 );
399 } else {
400 structure.insert(
401 &member.ty,
402 member.name.clone(),
403 member.offset - offset,
404 false,
405 member.access,
406 member.scope,
407 );
408 }
409 }
410 ResolvedGroup::Struct(inner_offset, children) => {
411 let mut inner = StructureBuilder::new();
412 apply_groups(members, &mut inner, children, inner_offset);
413 structure.insert(
414 &Conf::new(Type::structure(inner.finalize().as_ref()), MAX_CONFIDENCE),
415 format!("__inner{}", i),
416 inner_offset - offset,
417 false,
418 MemberAccess::PublicAccess,
419 MemberScope::NoScope,
420 );
421 }
422 ResolvedGroup::Union(inner_offset, children) => {
423 let mut inner = StructureBuilder::new();
424 inner.structure_type(StructureType::UnionStructureType);
425 apply_groups(members, &mut inner, children, inner_offset);
426 structure.insert(
427 &Conf::new(Type::structure(inner.finalize().as_ref()), MAX_CONFIDENCE),
428 format!("__inner{}", i),
429 inner_offset - offset,
430 false,
431 MemberAccess::PublicAccess,
432 MemberScope::NoScope,
433 );
434 }

Callers 1

group_structureFunction · 0.85

Calls 6

into_iterMethod · 0.45
insertMethod · 0.45
cloneMethod · 0.45
as_refMethod · 0.45
finalizeMethod · 0.45
structure_typeMethod · 0.45

Tested by

no test coverage detected