// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_ZUCCHINI_TEST_DISASSEMBLER_H_ #define COMPONENTS_ZUCCHINI_TEST_DISASSEMBLER_H_ #include #include #include #include "components/zucchini/buffer_view.h" #include "components/zucchini/disassembler.h" #include "components/zucchini/image_utils.h" namespace zucchini { // A trivial Disassembler that reads injected references of 3 different types. // This is only meant for testing and is not a full implementation of a // disassembler. Reading reference ignores bounds, and writing references does // nothing. class TestDisassembler : public Disassembler { public: TestDisassembler(const ReferenceTypeTraits& traits1, const std::vector& refs1, const ReferenceTypeTraits& traits2, const std::vector& refs2, const ReferenceTypeTraits& traits3, const std::vector& refs3); TestDisassembler(const TestDisassembler&) = delete; const TestDisassembler& operator=(const TestDisassembler&) = delete; ~TestDisassembler() override; // Disassembler: ExecutableType GetExeType() const override; std::string GetExeTypeString() const override; std::vector MakeReferenceGroups() const override; // Disassembler::ReaderFactory: std::unique_ptr MakeReadRefs1(offset_t /*lower*/, offset_t /*upper*/) { return MakeReadRefs(0); } std::unique_ptr MakeReadRefs2(offset_t /*lower*/, offset_t /*upper*/) { return MakeReadRefs(1); } std::unique_ptr MakeReadRefs3(offset_t /*lower*/, offset_t /*upper*/) { return MakeReadRefs(2); } // Disassembler::WriterFactory: std::unique_ptr MakeWriteRefs1(MutableBufferView image) { return MakeWriteRefs(image); } std::unique_ptr MakeWriteRefs2(MutableBufferView image) { return MakeWriteRefs(image); } std::unique_ptr MakeWriteRefs3(MutableBufferView image) { return MakeWriteRefs(image); } private: // Disassembler: bool Parse(ConstBufferView image) override; std::unique_ptr MakeReadRefs(int type); std::unique_ptr MakeWriteRefs(MutableBufferView image); ReferenceTypeTraits traits_[3]; std::vector refs_[3]; }; } // namespace zucchini #endif // COMPONENTS_ZUCCHINI_TEST_DISASSEMBLER_H_