aboutsummaryrefslogtreecommitdiff
path: root/disassembler_elf.h
diff options
context:
space:
mode:
authorSamuel Huang <huangs@chromium.org>2021-08-04 00:58:50 +0000
committerCopybara-Service <copybara-worker@google.com>2021-08-03 18:07:42 -0700
commit3e1f64d1395c53a730475d930b663d5f6006099e (patch)
treeb8ebaace02a34c080bbcfec6fa3c89379d6d6ce4 /disassembler_elf.h
parentcc55358d0d888c102638c2937e73f6a2e52518ca (diff)
downloadzucchini-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.h8
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();