MCPcopy Create free account
hub / github.com/lief-project/LIEF / add_variable

Method add_variable

plugins/binaryninja/dwarf-export/src/VarEngine.cpp:31–66  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29using namespace binaryninja;
30
31dw::Variable* VarEngine::add_variable(const bn::DataVariable& var) {
32 if (auto it = vars_.find(var.address); it != vars_.end()) {
33 return it->second.get();
34 }
35
36 std::string name = fmt::format("data_{:04x}", var.address);
37 bool is_external = false;
38 if (bn::Ref<bn::Symbol> sym = bv_.GetSymbolByAddress(var.address)) {
39 BNSymbolType type = sym->GetType();
40 if (type == ExternalSymbol ||
41 type == ImportedFunctionSymbol ||
42 type == FunctionSymbol ||
43 type == LibraryFunctionSymbol ||
44 type == SymbolicFunctionSymbol
45 )
46 {
47 return nullptr;
48 }
49 name = sym->GetFullName();
50 BNSymbolBinding binding = sym->GetBinding();
51 is_external = binding == GlobalBinding || binding == WeakBinding;
52 }
53
54 std::unique_ptr<dw::Variable> dw_var = unit_.create_variable(name);
55
56 dw_var->set_addr(var.address);
57 dw_var->set_type(types_.add_type(var.type->GetTypeName(), api_compat::get_type(var.type)));
58
59 if (is_external) {
60 dw_var->set_external();
61 }
62
63 return vars_.insert(
64 {var.address, std::move(dw_var)}
65 ).first->second.get();
66}
67}

Callers 1

createMethod · 0.80

Calls 10

findMethod · 0.80
formatFunction · 0.50
get_typeFunction · 0.50
endMethod · 0.45
getMethod · 0.45
create_variableMethod · 0.45
set_addrMethod · 0.45
set_typeMethod · 0.45
set_externalMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected