diff options
author | Samuel Huang <huangs@chromium.org> | 2021-08-04 00:58:50 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-08-03 18:07:42 -0700 |
commit | 3e1f64d1395c53a730475d930b663d5f6006099e (patch) | |
tree | b8ebaace02a34c080bbcfec6fa3c89379d6d6ce4 /disassembler_elf.h | |
parent | cc55358d0d888c102638c2937e73f6a2e52518ca (diff) | |
download | zucchini-3e1f64d1395c53a730475d930b663d5f6006099e.tar.gz |
[Zucchini] Disassemblers: Fix abs32 width for ELF; cleanup Traits template param.
Previously DisassemblerElfIntel<TRAITS>::ParseExecSection() passes a
hard-coded 4 to Abs32GapFinder's |abs32_width| CTOR param. This is
wrong for X64, which has abs32 pointer width of 8 bytes. This can lead
to lower quality rel32 extraction.
This CL fixes the above by replacing 4 with Traits::kVAWidth, and also
cleans up TRAITS / Traits template parameter for Disassembler:
* For template param, "template <class TRAITS>" is used throughout.
* This means function params needs to use TRAITS.
* For usage, each Disassembler class with TRAITS declares
using Traits = TRAITS;
(and variant) and uses Traits in the body of all functions. Reason:
Specialized derive classes won't have TRAITS available , so:
* Function params can use DisassemblerBase::Traits.
* Function bodies can use Traits.
* For consistency, even if TRAITS is available, still use Traits.
Bug: 1233831
Change-Id: Ie796c867fb238eca462b2fb6b4e68a965996c25a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3063919
Commit-Queue: Samuel Huang <huangs@chromium.org>
Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org>
Cr-Commit-Position: refs/heads/master@{#908261}
NOKEYCHECK=True
GitOrigin-RevId: 294860c47cd3678c46422ce57da366724e1dc629
Diffstat (limited to 'disassembler_elf.h')
-rw-r--r-- | disassembler_elf.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/disassembler_elf.h b/disassembler_elf.h index 17e7523..ffd1690 100644 --- a/disassembler_elf.h +++ b/disassembler_elf.h @@ -65,9 +65,10 @@ struct Elf64IntelTraits : public Elf64Traits { }; // Disassembler for ELF. -template <class Traits> +template <class TRAITS> class DisassemblerElf : public Disassembler { public: + using Traits = TRAITS; // Applies quick checks to determine whether |image| *may* point to the start // of an executable. Returns true iff the check passes. static bool QuickDetect(ConstBufferView image); @@ -155,9 +156,10 @@ class DisassemblerElf : public Disassembler { }; // Disassembler for ELF with Intel architectures. -template <class Traits> -class DisassemblerElfIntel : public DisassemblerElf<Traits> { +template <class TRAITS> +class DisassemblerElfIntel : public DisassemblerElf<TRAITS> { public: + using Traits = TRAITS; enum ReferenceType : uint8_t { kReloc, kAbs32, kRel32, kTypeCount }; DisassemblerElfIntel(); |