Skip to content

Commit

Permalink
Container Memory Reservations.
Browse files Browse the repository at this point in the history
  • Loading branch information
bpotchik authored and plafosse committed Mar 23, 2018
1 parent 86da0eb commit 5f26313
Show file tree
Hide file tree
Showing 19 changed files with 87 additions and 22 deletions.
11 changes: 11 additions & 0 deletions architecture.cpp
Expand Up @@ -538,6 +538,7 @@ vector<Ref<Architecture>> Architecture::GetList()
archs = BNGetArchitectureList(&count);

vector<Ref<Architecture>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreArchitecture(archs[i]));

Expand Down Expand Up @@ -766,6 +767,7 @@ vector<uint32_t> Architecture::GetModifiedRegistersOnWrite(uint32_t reg)
uint32_t* regs = BNGetModifiedArchitectureRegistersOnWrite(m_object, reg, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(regs[i]);

Expand Down Expand Up @@ -877,6 +879,7 @@ vector<Ref<CallingConvention>> Architecture::GetCallingConventions()
BNCallingConvention** list = BNGetArchitectureCallingConventions(m_object, &count);

vector<Ref<CallingConvention>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreCallingConvention(BNNewCallingConventionReference(list[i])));

Expand Down Expand Up @@ -1020,6 +1023,7 @@ bool CoreArchitecture::GetInstructionText(const uint8_t* data, uint64_t addr, si
if (!BNGetInstructionText(m_object, data, addr, &len, &tokens, &count))
return false;

result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.emplace_back(tokens[i].type, tokens[i].context, tokens[i].text, tokens[i].address,
Expand Down Expand Up @@ -1070,6 +1074,7 @@ vector<uint32_t> CoreArchitecture::GetFullWidthRegisters()
uint32_t* regs = BNGetFullWidthArchitectureRegisters(m_object, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(regs[i]);

Expand All @@ -1084,6 +1089,7 @@ vector<uint32_t> CoreArchitecture::GetAllRegisters()
uint32_t* regs = BNGetAllArchitectureRegisters(m_object, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(regs[i]);

Expand All @@ -1098,6 +1104,7 @@ vector<uint32_t> CoreArchitecture::GetAllFlags()
uint32_t* regs = BNGetAllArchitectureFlags(m_object, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(regs[i]);

Expand All @@ -1112,6 +1119,7 @@ vector<uint32_t> CoreArchitecture::GetAllFlagWriteTypes()
uint32_t* regs = BNGetAllArchitectureFlagWriteTypes(m_object, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(regs[i]);

Expand All @@ -1132,6 +1140,7 @@ vector<uint32_t> CoreArchitecture::GetFlagsRequiredForFlagCondition(BNLowLevelIL
uint32_t* flags = BNGetArchitectureFlagsRequiredForFlagCondition(m_object, cond, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(flags[i]);

Expand All @@ -1146,6 +1155,7 @@ vector<uint32_t> CoreArchitecture::GetFlagsWrittenByFlagWriteType(uint32_t write
uint32_t* flags = BNGetArchitectureFlagsWrittenByFlagWriteType(m_object, writeType, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(flags[i]);

Expand Down Expand Up @@ -1192,6 +1202,7 @@ vector<uint32_t> CoreArchitecture::GetGlobalRegisters()
uint32_t* regs = BNGetArchitectureGlobalRegisters(m_object, &count);

vector<uint32_t> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(regs[i]);

Expand Down
1 change: 1 addition & 0 deletions backgroundtask.cpp
Expand Up @@ -67,6 +67,7 @@ vector<Ref<BackgroundTask>> BackgroundTask::GetRunningTasks()
BNBackgroundTask** tasks = BNGetRunningBackgroundTasks(&count);

vector<Ref<BackgroundTask>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new BackgroundTask(BNNewBackgroundTaskReference(tasks[i])));

Expand Down
4 changes: 4 additions & 0 deletions basicblock.cpp
Expand Up @@ -120,6 +120,7 @@ vector<BasicBlockEdge> BasicBlock::GetOutgoingEdges() const
BNBasicBlockEdge* array = BNGetBasicBlockOutgoingEdges(m_object, &count);

vector<BasicBlockEdge> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
BasicBlockEdge edge;
Expand All @@ -140,6 +141,7 @@ vector<BasicBlockEdge> BasicBlock::GetIncomingEdges() const
BNBasicBlockEdge* array = BNGetBasicBlockIncomingEdges(m_object, &count);

vector<BasicBlockEdge> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
BasicBlockEdge edge;
Expand Down Expand Up @@ -269,10 +271,12 @@ vector<DisassemblyTextLine> BasicBlock::GetDisassemblyText(DisassemblySettings*
BNDisassemblyTextLine* lines = BNGetBasicBlockDisassemblyText(m_object, settings->GetObject(), &count);

vector<DisassemblyTextLine> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
DisassemblyTextLine line;
line.addr = lines[i].addr;
line.tokens.reserve(lines[i].count);
for (size_t j = 0; j < lines[i].count; j++)
{
InstructionTextToken token;
Expand Down
20 changes: 20 additions & 0 deletions binaryview.cpp
Expand Up @@ -670,6 +670,7 @@ vector<BNModificationStatus> BinaryView::GetModification(uint64_t offset, size_t
len = BNGetModificationArray(m_object, offset, mod, len);

vector<BNModificationStatus> result;
result.reserve(len);
for (size_t i = 0; i < len; i++)
result.push_back(mod[i]);

Expand Down Expand Up @@ -988,6 +989,7 @@ vector<Ref<Function>> BinaryView::GetAnalysisFunctionList()
BNFunction** list = BNGetAnalysisFunctionList(m_object, &count);

vector<Ref<Function>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Function(BNNewFunctionReference(list[i])));

Expand Down Expand Up @@ -1026,6 +1028,7 @@ vector<Ref<Function>> BinaryView::GetAnalysisFunctionsForAddress(uint64_t addr)
BNFunction** list = BNGetAnalysisFunctionsForAddress(m_object, addr, &count);

vector<Ref<Function>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Function(BNNewFunctionReference(list[i])));

Expand Down Expand Up @@ -1058,6 +1061,7 @@ vector<Ref<BasicBlock>> BinaryView::GetBasicBlocksForAddress(uint64_t addr)
BNBasicBlock** blocks = BNGetBasicBlocksForAddress(m_object, addr, &count);

vector<Ref<BasicBlock>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i])));

Expand All @@ -1072,6 +1076,7 @@ vector<Ref<BasicBlock>> BinaryView::GetBasicBlocksStartingAtAddress(uint64_t add
BNBasicBlock** blocks = BNGetBasicBlocksStartingAtAddress(m_object, addr, &count);

vector<Ref<BasicBlock>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i])));

Expand All @@ -1086,6 +1091,7 @@ vector<ReferenceSource> BinaryView::GetCodeReferences(uint64_t addr)
BNReferenceSource* refs = BNGetCodeReferences(m_object, addr, &count);

vector<ReferenceSource> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
ReferenceSource src;
Expand All @@ -1106,6 +1112,7 @@ vector<ReferenceSource> BinaryView::GetCodeReferences(uint64_t addr, uint64_t le
BNReferenceSource* refs = BNGetCodeReferencesInRange(m_object, addr, len, &count);

vector<ReferenceSource> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
ReferenceSource src;
Expand Down Expand Up @@ -1144,6 +1151,7 @@ vector<Ref<Symbol>> BinaryView::GetSymbolsByName(const string& name)
BNSymbol** syms = BNGetSymbolsByName(m_object, name.c_str(), &count);

vector<Ref<Symbol>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Symbol(BNNewSymbolReference(syms[i])));

Expand All @@ -1158,6 +1166,7 @@ vector<Ref<Symbol>> BinaryView::GetSymbols()
BNSymbol** syms = BNGetSymbols(m_object, &count);

vector<Ref<Symbol>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Symbol(BNNewSymbolReference(syms[i])));

Expand All @@ -1172,6 +1181,7 @@ vector<Ref<Symbol>> BinaryView::GetSymbols(uint64_t start, uint64_t len)
BNSymbol** syms = BNGetSymbolsInRange(m_object, start, len, &count);

vector<Ref<Symbol>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Symbol(BNNewSymbolReference(syms[i])));

Expand All @@ -1186,6 +1196,7 @@ vector<Ref<Symbol>> BinaryView::GetSymbolsOfType(BNSymbolType type)
BNSymbol** syms = BNGetSymbolsOfType(m_object, type, &count);

vector<Ref<Symbol>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Symbol(BNNewSymbolReference(syms[i])));

Expand All @@ -1200,6 +1211,7 @@ vector<Ref<Symbol>> BinaryView::GetSymbolsOfType(BNSymbolType type, uint64_t sta
BNSymbol** syms = BNGetSymbolsOfTypeInRange(m_object, type, start, len, &count);

vector<Ref<Symbol>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Symbol(BNNewSymbolReference(syms[i])));

Expand Down Expand Up @@ -1412,6 +1424,7 @@ vector<LinearDisassemblyLine> BinaryView::GetPreviousLinearDisassemblyLines(Line
settings ? settings->GetObject() : nullptr, &count);

vector<LinearDisassemblyLine> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
LinearDisassemblyLine line;
Expand All @@ -1420,6 +1433,7 @@ vector<LinearDisassemblyLine> BinaryView::GetPreviousLinearDisassemblyLines(Line
line.block = lines[i].block ? new BasicBlock(BNNewBasicBlockReference(lines[i].block)) : nullptr;
line.lineOffset = lines[i].lineOffset;
line.contents.addr = lines[i].contents.addr;
line.contents.tokens.reserve(lines[i].contents.count);
for (size_t j = 0; j < lines[i].contents.count; j++)
{
InstructionTextToken token;
Expand Down Expand Up @@ -1458,6 +1472,7 @@ vector<LinearDisassemblyLine> BinaryView::GetNextLinearDisassemblyLines(LinearDi
settings ? settings->GetObject() : nullptr, &count);

vector<LinearDisassemblyLine> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
LinearDisassemblyLine line;
Expand All @@ -1466,6 +1481,7 @@ vector<LinearDisassemblyLine> BinaryView::GetNextLinearDisassemblyLines(LinearDi
line.block = lines[i].block ? new BasicBlock(BNNewBasicBlockReference(lines[i].block)) : nullptr;
line.lineOffset = lines[i].lineOffset;
line.contents.addr = lines[i].contents.addr;
line.contents.tokens.reserve(lines[i].contents.count);
for (size_t j = 0; j < lines[i].contents.count; j++)
{
InstructionTextToken token;
Expand Down Expand Up @@ -1704,6 +1720,7 @@ vector<Segment> BinaryView::GetSegments()
BNSegment* segments = BNGetSegments(m_object, &count);

vector<Segment> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
Segment segment;
Expand Down Expand Up @@ -1777,6 +1794,7 @@ vector<Section> BinaryView::GetSections()
BNSection* sections = BNGetSections(m_object, &count);

vector<Section> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
Section section;
Expand Down Expand Up @@ -1804,6 +1822,7 @@ vector<Section> BinaryView::GetSectionsAt(uint64_t addr)
BNSection* sections = BNGetSectionsAt(m_object, addr, &count);

vector<Section> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
Section section;
Expand Down Expand Up @@ -1855,6 +1874,7 @@ vector<string> BinaryView::GetUniqueSectionNames(const vector<string>& names)

char** outgoingNames = BNGetUniqueSectionNames(m_object, incomingNames, names.size());
vector<string> result;
result.reserve(names.size());
for (size_t i = 0; i < names.size(); i++)
result.push_back(outgoingNames[i]);

Expand Down
2 changes: 2 additions & 0 deletions binaryviewtype.cpp
Expand Up @@ -83,6 +83,7 @@ vector<Ref<BinaryViewType>> BinaryViewType::GetViewTypes()
types = BNGetBinaryViewTypes(&count);

vector<Ref<BinaryViewType>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreBinaryViewType(types[i]));

Expand All @@ -98,6 +99,7 @@ vector<Ref<BinaryViewType>> BinaryViewType::GetViewTypesForData(BinaryView* data
types = BNGetBinaryViewTypesForData(data->GetObject(), &count);

vector<Ref<BinaryViewType>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreBinaryViewType(types[i]));

Expand Down
11 changes: 9 additions & 2 deletions function.cpp
Expand Up @@ -174,6 +174,7 @@ vector<Ref<BasicBlock>> Function::GetBasicBlocks() const
BNBasicBlock** blocks = BNGetFunctionBasicBlockList(m_object, &count);

vector<Ref<BasicBlock>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i])));

Expand Down Expand Up @@ -379,6 +380,7 @@ vector<StackVariableReference> Function::GetStackVariablesReferencedByInstructio
BNStackVariableReference* refs = BNGetStackVariablesReferencedByInstruction(m_object, arch->GetObject(), addr, &count);

vector<StackVariableReference> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
StackVariableReference ref;
Expand Down Expand Up @@ -514,10 +516,9 @@ Confidence<vector<Variable>> Function::GetParameterVariables() const
{
BNParameterVariablesWithConfidence vars = BNGetFunctionParameterVariables(m_object);
vector<Variable> varList;
varList.reserve(vars.count);
for (size_t i = 0; i < vars.count; i++)
{
varList.emplace_back(vars.vars[i].type, vars.vars[i].index, vars.vars[i].storage);
}
Confidence<vector<Variable>> result(varList, vars.confidence);
BNFreeParameterVariables(&vars);
return result;
Expand Down Expand Up @@ -979,6 +980,7 @@ vector<IndirectBranchInfo> Function::GetIndirectBranches()
BNIndirectBranchInfo* branches = BNGetIndirectBranches(m_object, &count);

vector<IndirectBranchInfo> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
IndirectBranchInfo b;
Expand All @@ -1001,6 +1003,7 @@ vector<IndirectBranchInfo> Function::GetIndirectBranchesAt(Architecture* arch, u
BNIndirectBranchInfo* branches = BNGetIndirectBranchesAt(m_object, arch->GetObject(), addr, &count);

vector<IndirectBranchInfo> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
IndirectBranchInfo b;
Expand All @@ -1023,9 +1026,11 @@ vector<vector<InstructionTextToken>> Function::GetBlockAnnotations(Architecture*
BNInstructionTextLine* lines = BNGetFunctionBlockAnnotations(m_object, arch->GetObject(), addr, &count);

vector<vector<InstructionTextToken>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
vector<InstructionTextToken> line;
line.reserve(lines[i].count);
for (size_t j = 0; j < lines[i].count; j++)
{
InstructionTextToken token;
Expand Down Expand Up @@ -1237,10 +1242,12 @@ vector<DisassemblyTextLine> Function::GetTypeTokens(DisassemblySettings* setting
settings ? settings->GetObject() : nullptr, &count);

vector<DisassemblyTextLine> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
DisassemblyTextLine line;
line.addr = lines[i].addr;
line.tokens.reserve(lines[i].count);
for (size_t j = 0; j < lines[i].count; j++)
{
InstructionTextToken token;
Expand Down
2 changes: 2 additions & 0 deletions functiongraph.cpp
Expand Up @@ -110,6 +110,7 @@ vector<Ref<FunctionGraphBlock>> FunctionGraph::GetBlocks()
BNFunctionGraphBlock** blocks = BNGetFunctionGraphBlocks(m_graph, &count);

vector<Ref<FunctionGraphBlock>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
auto block = m_cachedBlocks.find(blocks[i]);
Expand Down Expand Up @@ -148,6 +149,7 @@ vector<Ref<FunctionGraphBlock>> FunctionGraph::GetBlocksInRegion(int left, int t
BNFunctionGraphBlock** blocks = BNGetFunctionGraphBlocksInRegion(m_graph, left, top, right, bottom, &count);

vector<Ref<FunctionGraphBlock>> result;
result.reserve(count);
for (size_t i = 0; i < count; i++)
{
auto block = m_cachedBlocks.find(blocks[i]);
Expand Down

0 comments on commit 5f26313

Please sign in to comment.