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

Method AppendFieldTextTokens

lang/c/pseudoc.cpp:464–528  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

462
463
464void PseudoCFunction::AppendFieldTextTokens(const HighLevelILInstruction& var, uint64_t offset,
465 size_t memberIndex, size_t size, HighLevelILTokenEmitter& tokens, bool deref, bool displayDeref)
466{
467 const auto type = GetFieldType(var, deref);
468 const auto fieldDisplayType = GetFieldDisplayType(type, offset, memberIndex, deref);
469 switch (fieldDisplayType)
470 {
471 case FieldDisplayName:
472 {
473 std::optional<size_t> memberIndexHint;
474 if (memberIndex != BN_INVALID_EXPR)
475 memberIndexHint = memberIndex;
476
477 if (type->GetStructure()->ResolveMemberOrBaseMember(GetFunction()->GetView(), offset, 0,
478 [&](NamedTypeReference*, Structure* s, size_t memberIndex, uint64_t structOffset,
479 uint64_t adjustedOffset, const StructureMember& member) {
480 if (deref && displayDeref)
481 tokens.Append(OperationToken, "->");
482 else
483 tokens.Append(OperationToken, ".");
484 deref = false;
485
486 vector<string> nameList {member.name};
487 HighLevelILTokenEmitter::AddNamesForOuterStructureMembers(
488 GetFunction()->GetView(), type, var, nameList);
489
490 tokens.Append(FieldNameToken, member.name, structOffset + member.offset, 0, 0,
491 BN_FULL_CONFIDENCE, nameList);
492 }),
493 memberIndexHint)
494 return;
495
496 // Part of structure but no defined field, use __offset syntax
497 if (deref && displayDeref)
498 tokens.Append(OperationToken, "->");
499 else
500 tokens.Append(OperationToken, ".");
501 char offsetStr[64];
502 snprintf(
503 offsetStr, sizeof(offsetStr), "__offset(0x%" PRIx64 ")%s", offset, Type::GetSizeSuffix(size).c_str());
504
505 vector<string> nameList {offsetStr};
506 HighLevelILTokenEmitter::AddNamesForOuterStructureMembers(GetFunction()->GetView(), type, var, nameList);
507
508 tokens.Append(StructOffsetToken, offsetStr, offset, size, 0, BN_FULL_CONFIDENCE, nameList);
509 return;
510 }
511
512 case FieldDisplayOffset:
513 {
514 /* this is handled before the display */
515 return;
516 }
517
518 case FieldDisplayMemberOffset:
519 {
520 tokens.AppendOpenBracket();
521 tokens.AppendIntegerTextToken(var, offset, size);

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