aboutsummaryrefslogtreecommitdiff
path: root/disassembler_elf.cc
diff options
context:
space:
mode:
Diffstat (limited to 'disassembler_elf.cc')
-rw-r--r--disassembler_elf.cc11
1 files changed, 5 insertions, 6 deletions
diff --git a/disassembler_elf.cc b/disassembler_elf.cc
index ef050a4..474f43e 100644
--- a/disassembler_elf.cc
+++ b/disassembler_elf.cc
@@ -371,13 +371,12 @@ void DisassemblerElfIntel<Traits>::ParseExecSection(
ConstBufferView region(image_.begin() + section.sh_offset, section.sh_size);
Abs32GapFinder gap_finder(image_, region, abs32_locations_, 4);
- std::unique_ptr<Rel32FinderIntel> finder =
- std::make_unique<typename Traits::Rel32FinderUse>(image_);
+ typename Traits::Rel32FinderUse finder;
for (auto gap = gap_finder.GetNext(); gap.has_value();
gap = gap_finder.GetNext()) {
- finder->Reset(gap.value());
- for (auto rel32 = finder->GetNext(); rel32.has_value();
- rel32 = finder->GetNext()) {
+ finder.SetRegion(gap.value());
+ for (auto rel32 = finder.GetNext(); rel32.has_value();
+ rel32 = finder.GetNext()) {
offset_t rel32_offset =
base::checked_cast<offset_t>(rel32->location - image_.begin());
rva_t rel32_rva = rva_t(rel32_offset + from_offset_to_rva);
@@ -385,7 +384,7 @@ void DisassemblerElfIntel<Traits>::ParseExecSection(
if (target_rva_checker.IsValid(target_rva) &&
(rel32->can_point_outside_section ||
(start_rva <= target_rva && target_rva < end_rva))) {
- finder->Accept();
+ finder.Accept();
rel32_locations_.push_back(rel32_offset);
}
}