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

Method AppendFieldTextTokens

lang/rust/pseudorust.cpp:500–557  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

498
499
500void PseudoRustFunction::AppendFieldTextTokens(const HighLevelILInstruction& var, uint64_t offset,
501 size_t memberIndex, size_t size, HighLevelILTokenEmitter& tokens, bool deref)
502{
503 const auto type = GetFieldType(var, deref);
504 const auto fieldDisplayType = GetFieldDisplayType(type, offset, memberIndex, deref);
505 switch (fieldDisplayType)
506 {
507 case FieldDisplayName:
508 {
509 std::optional<size_t> memberIndexHint;
510 if (memberIndex != BN_INVALID_EXPR)
511 memberIndexHint = memberIndex;
512
513 if (type->GetStructure()->ResolveMemberOrBaseMember(GetFunction()->GetView(), offset, 0,
514 [&](NamedTypeReference*, Structure* s, size_t memberIndex, uint64_t structOffset,
515 uint64_t adjustedOffset, const StructureMember& member) {
516 tokens.Append(OperationToken, ".");
517
518 vector<string> nameList {member.name};
519 HighLevelILTokenEmitter::AddNamesForOuterStructureMembers(
520 GetFunction()->GetView(), type, var, nameList);
521
522 tokens.Append(FieldNameToken, member.name, structOffset + member.offset, 0, 0,
523 BN_FULL_CONFIDENCE, nameList);
524 }),
525 memberIndexHint)
526 return;
527
528 // Part of structure but no defined field, use __offset syntax
529 tokens.Append(OperationToken, ".");
530 char offsetStr[64];
531 snprintf(
532 offsetStr, sizeof(offsetStr), "__offset(0x%" PRIx64 ")%s", offset, Type::GetSizeSuffix(size).c_str());
533
534 vector<string> nameList {offsetStr};
535 HighLevelILTokenEmitter::AddNamesForOuterStructureMembers(GetFunction()->GetView(), type, var, nameList);
536
537 tokens.Append(StructOffsetToken, offsetStr, offset, size, 0, BN_FULL_CONFIDENCE, nameList);
538 return;
539 }
540
541 case FieldDisplayOffset:
542 {
543 /* this is handled before the display */
544 return;
545 }
546
547 case FieldDisplayMemberOffset:
548 {
549 tokens.AppendOpenBracket();
550 tokens.AppendIntegerTextToken(var, offset, size);
551 tokens.AppendCloseBracket();
552 return;
553 }
554
555 default: break;
556 }
557}

Callers

nothing calls this directly

Calls 8

GetStructureMethod · 0.80
c_strMethod · 0.80
AppendOpenBracketMethod · 0.80
AppendCloseBracketMethod · 0.80
GetViewMethod · 0.45
AppendMethod · 0.45

Tested by

no test coverage detected