From 8dcd30d2cecfbd6a159dd654e8382de10d86bc98 Mon Sep 17 00:00:00 2001 From: Christoph Egger Date: Wed, 1 Apr 2015 16:53:50 +0200 Subject: [PATCH] Add armel testcase This one doesn't do thumb so it's easy --- CMakeLists.txt | 1 + .../llvm/tests/armelLinuxDisassemblerTest.cxx | 72 ++++++++++++++++++ .../binaries/crypt.clang.O2.armel.elf | Bin 0 -> 6856 bytes .../binaries/crypt.clang.O2.armel.elf.frida | Bin 0 -> 6185 bytes 4 files changed, 73 insertions(+) create mode 100644 src/disassembler/llvm/tests/armelLinuxDisassemblerTest.cxx create mode 100755 testdata/disassembler/binaries/crypt.clang.O2.armel.elf create mode 100644 testdata/disassembler/binaries/crypt.clang.O2.armel.elf.frida diff --git a/CMakeLists.txt b/CMakeLists.txt index c3ff63f..c0abdf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,7 @@ set(fridatest_SOURCES src/core/tests/CommentTest.cxx src/disassembler/llvm/tests/amd64LinuxDisassemblerTest.cxx src/disassembler/llvm/tests/mipselLinuxDisassemblerTest.cxx + src/disassembler/llvm/tests/armelLinuxDisassemblerTest.cxx src/disassembler/llvm/tests/amd64MachODisassemblerTest.cxx ${frida_SOURCES} ) diff --git a/src/disassembler/llvm/tests/armelLinuxDisassemblerTest.cxx b/src/disassembler/llvm/tests/armelLinuxDisassemblerTest.cxx new file mode 100644 index 0000000..4e79972 --- /dev/null +++ b/src/disassembler/llvm/tests/armelLinuxDisassemblerTest.cxx @@ -0,0 +1,72 @@ +#include +#include + +#include "core/InformationManager.hxx" +#include "core/Function.hxx" +#include "core/BasicBlock.hxx" +#include "disassembler/llvm/LLVMDisassembler.hxx" + +extern char * TEST_DATA_DIRECTORY; + +static void testMainFunction(Function* main) { + ASSERT_NE(nullptr, main); + EXPECT_STREQ("main", main->getName().c_str()); + + auto blocks = main->blocks(); + auto block = blocks.begin()->second; + EXPECT_EQ(4, blocks.size()); + EXPECT_EQ(22, block->getInstructions().size()); + EXPECT_EQ(0x1068c, block->getNextBlock(0)); + EXPECT_EQ(0x10684, block->getNextBlock(1)); + + EXPECT_TRUE(blocks.find(0x1068c) != blocks.end()); + EXPECT_TRUE(blocks.find(0x10684) != blocks.end()); +} + +static void testCheckFunction(Function* check) { + ASSERT_NE(nullptr, check); + EXPECT_STREQ("check", check->getName().c_str()); + + auto blocks = check->blocks(); + auto block = blocks.begin()->second; + EXPECT_EQ(1, blocks.size()); + EXPECT_EQ(18, block->getInstructions().size()); + EXPECT_EQ(0x0, block->getNextBlock(0)); + EXPECT_EQ(0x0, block->getNextBlock(1)); +} + +TEST(llvmDisassemblerTest, armelLinuxOpenBinaryBasicStructure) { + SCOPED_TRACE("opening cryptsample.clang.armel.elf"); + InformationManager manager; + + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + llvm::InitializeAllDisassemblers(); + + manager.reset(std::string(TEST_DATA_DIRECTORY) + + "/disassembler/binaries/crypt.clang.O2.armel.elf"); + + ASSERT_NE(nullptr, manager.getDisassembler()); + EXPECT_EQ(0x104a8, manager.getDisassembler()->entryAddress()); + testCheckFunction(manager.getFunction(0x105d8)); + testMainFunction(manager.getFunction(0x1062c)); +} + +TEST(llvmDisassemblerTest, armelLinuxLoadBinaryBasicStructure) { + SCOPED_TRACE("loading cryptsample.clang.armel.elf"); + InformationManager manager; + + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + llvm::InitializeAllDisassemblers(); + + manager.load(std::string(TEST_DATA_DIRECTORY) + + "/disassembler/binaries/crypt.clang.O2.armel.elf.frida"); + + ASSERT_NE(nullptr, manager.getDisassembler()); + EXPECT_EQ(0x104a8, manager.getDisassembler()->entryAddress()); + testCheckFunction(manager.getFunction(0x105d8)); + testMainFunction(manager.getFunction(0x1062c)); +} diff --git a/testdata/disassembler/binaries/crypt.clang.O2.armel.elf b/testdata/disassembler/binaries/crypt.clang.O2.armel.elf new file mode 100755 index 0000000000000000000000000000000000000000..4ca765e94952e2a01e37dca193cf7e0f461eff07 GIT binary patch literal 6856 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 literal 0 HcmV?d00001 -- 2.39.2