aboutsummaryrefslogtreecommitdiff
path: root/element_detection.cc
diff options
context:
space:
mode:
authorEtienne Pierre-doray <etiennep@chromium.org>2018-08-10 17:44:37 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 20:34:00 -0700
commite57c4e6bb4c122686c16f40e0b9d50a2e683d42b (patch)
tree2cf002c3499a23f698d92eb0ae2b51bfe9bc1606 /element_detection.cc
parenta88cad0485f1c73d63ba0a1bcfccc8a68bd300c6 (diff)
downloadzucchini-e57c4e6bb4c122686c16f40e0b9d50a2e683d42b.tar.gz
[Zucchini] Create elf disassembler.
Creates Disassembler that recognises and parses ELF format. For now, it only supports Intel architeture. Support for Arm will be added in follow-up CLs. Change-Id: Ibdcf113b573f22844b6a1611c5ff6df46829b9b3 Reviewed-on: https://chromium-review.googlesource.com/1136841 Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org> Reviewed-by: Greg Thompson <grt@chromium.org> Reviewed-by: Samuel Huang <huangs@chromium.org> Cr-Commit-Position: refs/heads/master@{#582233} NOKEYCHECK=True GitOrigin-RevId: 3c64e078fea9f23e44939c25ca02cf05b72b2c40
Diffstat (limited to 'element_detection.cc')
-rw-r--r--element_detection.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/element_detection.cc b/element_detection.cc
index 6b31f61..fa5adf4 100644
--- a/element_detection.cc
+++ b/element_detection.cc
@@ -19,6 +19,10 @@
#include "components/zucchini/disassembler_win32.h"
#endif // BUILDFLAG(ENABLE_WIN)
+#if BUILDFLAG(ENABLE_ELF)
+#include "components/zucchini/disassembler_elf.h"
+#endif // BUILDFLAG(ENABLE_ELF)
+
#if BUILDFLAG(ENABLE_ZTF)
#include "components/zucchini/disassembler_ztf.h"
#endif // BUILDFLAG(ENABLE_ZTF)
@@ -50,6 +54,20 @@ std::unique_ptr<Disassembler> MakeDisassemblerWithoutFallback(
}
#endif // BUILDFLAG(ENABLE_WIN)
+#if BUILDFLAG(ENABLE_ELF)
+ if (DisassemblerElfX86::QuickDetect(image)) {
+ auto disasm = Disassembler::Make<DisassemblerElfX86>(image);
+ if (disasm && disasm->size() >= kMinProgramSize)
+ return disasm;
+ }
+
+ if (DisassemblerElfX64::QuickDetect(image)) {
+ auto disasm = Disassembler::Make<DisassemblerElfX64>(image);
+ if (disasm && disasm->size() >= kMinProgramSize)
+ return disasm;
+ }
+#endif // BUILDFLAG(ENABLE_ELF)
+
#if BUILDFLAG(ENABLE_DEX)
if (DisassemblerDex::QuickDetect(image)) {
auto disasm = Disassembler::Make<DisassemblerDex>(image);
@@ -79,6 +97,12 @@ std::unique_ptr<Disassembler> MakeDisassemblerOfType(ConstBufferView image,
case kExeTypeWin32X64:
return Disassembler::Make<DisassemblerWin32X64>(image);
#endif // BUILDFLAG(ENABLE_WIN)
+#if BUILDFLAG(ENABLE_ELF)
+ case kExeTypeElfX86:
+ return Disassembler::Make<DisassemblerElfX86>(image);
+ case kExeTypeElfX64:
+ return Disassembler::Make<DisassemblerElfX64>(image);
+#endif // BUILDFLAG(ENABLE_ELF)
#if BUILDFLAG(ENABLE_DEX)
case kExeTypeDex:
return Disassembler::Make<DisassemblerDex>(image);