diff options
| author | Xusheng <xusheng@vector35.com> | 2024-11-08 13:29:00 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2024-11-13 18:45:59 +0800 |
| commit | 8a00fb5b8c1b9c82db5528b288859227a7e35868 (patch) | |
| tree | 8d240dcd729437064c0c9d254cde37dc2229dd07 /view/pe | |
| parent | 30a0fbb5839b08dc58efe602a5cd19c90fbd4c50 (diff) | |
Bulk add segments in the binary view to improve performance
Diffstat (limited to 'view/pe')
| -rw-r--r-- | view/pe/coffview.cpp | 6 | ||||
| -rw-r--r-- | view/pe/peview.cpp | 4 | ||||
| -rw-r--r-- | view/pe/teview.cpp | 2 |
3 files changed, 12 insertions, 0 deletions
diff --git a/view/pe/coffview.cpp b/view/pe/coffview.cpp index 28103a4a..814c8cf2 100644 --- a/view/pe/coffview.cpp +++ b/view/pe/coffview.cpp @@ -246,6 +246,7 @@ bool COFFView::Init() // Read sections reader.Seek(sectionHeadersOffset); BinaryReader sectionNameReader(GetParentView(), LittleEndian); + BeginBulkAddSegments(); for (uint32_t i = 0; i < sectionCount; i++) { @@ -432,6 +433,8 @@ bool COFFView::Init() } } + EndBulkAddSegments(); + // Apply architecture and platform if (!m_arch) { @@ -1214,6 +1217,7 @@ bool COFFView::Init() QualifiedName coffRelocTypeName = DefineType(coffRelocTypeId, coffRelocName, coffRelocStructType); auto relocHandler = m_arch->GetRelocationHandler("COFF"); + BeginBulkAddSegments(); for (uint32_t i = 0; i < sectionCount; i++) { @@ -1351,6 +1355,8 @@ bool COFFView::Init() } } } + + EndBulkAddSegments(); } } catch (std::exception& e) diff --git a/view/pe/peview.cpp b/view/pe/peview.cpp index ecf4a42b..f0c43056 100644 --- a/view/pe/peview.cpp +++ b/view/pe/peview.cpp @@ -742,6 +742,8 @@ bool PEView::Init() reader.Seek(optionalHeaderOffset + header.optionalHeaderSize); // Read sections BinaryReader sectionNameReader(GetParentView(), LittleEndian); + BeginBulkAddSegments(); + for (uint16_t i = 0; i < header.sectionCount; i++) { PESection section; @@ -900,6 +902,8 @@ bool PEView::Init() } } + EndBulkAddSegments(); + // Finished for parse only mode if (m_parseOnly) return true; diff --git a/view/pe/teview.cpp b/view/pe/teview.cpp index 5e0a2a0e..f8666717 100644 --- a/view/pe/teview.cpp +++ b/view/pe/teview.cpp @@ -109,6 +109,7 @@ void TEView::ReadTEImageSectionHeaders(BinaryReader& reader, uint32_t numSection void TEView::CreateSections() { + BeginBulkAddSegments(); for (size_t i = 0; i < m_sections.size(); i++) { auto section = m_sections[i]; @@ -138,6 +139,7 @@ void TEView::CreateSections() semantics = ReadWriteDataSectionSemantics; AddAutoSection(section.name, section.virtualAddress + m_imageBase, section.virtualSize, semantics); } + EndBulkAddSegments(); } void TEView::AssignHeaderTypes() |
