X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fdisassembler%2Fllvm%2Ftests%2FDisassemblerTest.cxx.m4;fp=src%2Fdisassembler%2Fllvm%2Ftests%2FDisassemblerTest.cxx.m4;h=84776712685019f76a17292bbbe195cafd81747d;hp=0000000000000000000000000000000000000000;hb=7268ab21d8676b43dc115dfb2a242d2ed73c8166;hpb=8dcd30d2cecfbd6a159dd654e8382de10d86bc98 diff --git a/src/disassembler/llvm/tests/DisassemblerTest.cxx.m4 b/src/disassembler/llvm/tests/DisassemblerTest.cxx.m4 new file mode 100644 index 0000000..8477671 --- /dev/null +++ b/src/disassembler/llvm/tests/DisassemblerTest.cxx.m4 @@ -0,0 +1,73 @@ +#include +#include + +#include "core/InformationManager.hxx" +#include "core/Function.hxx" +#include "core/BasicBlock.hxx" +#include "disassembler/llvm/LLVMDisassembler.hxx" +define(GEN_NAME, $1$2)dnl + +extern char * TEST_DATA_DIRECTORY; + +static void testMainFunction(Function* main) { + ASSERT_NE(nullptr, main); + EXPECT_STREQ("MAIN_NAME", main->getName().c_str()); + + auto blocks = main->blocks(); + auto block = blocks.begin()->second; + EXPECT_EQ(MAIN_BLOCKS, blocks.size()); + EXPECT_EQ(MAIN_SIZE, block->getInstructions().size()); + EXPECT_EQ(MAIN_CHILD_0, block->getNextBlock(0)); + EXPECT_EQ(MAIN_CHILD_1, block->getNextBlock(1)); + + EXPECT_TRUE(blocks.find(MAIN_CHILD_0) != blocks.end()); + EXPECT_TRUE(blocks.find(MAIN_CHILD_1) != blocks.end()); +} + +static void testCheckFunction(Function* check) { + ASSERT_NE(nullptr, check); + EXPECT_STREQ("TEST_NAME", check->getName().c_str()); + + auto blocks = check->blocks(); + auto block = blocks.begin()->second; + EXPECT_EQ(1, blocks.size()); + EXPECT_EQ(TEST_SIZE, block->getInstructions().size()); + EXPECT_EQ(0x0, block->getNextBlock(0)); + EXPECT_EQ(0x0, block->getNextBlock(1)); +} + +TEST(llvmDisassemblerTest, GEN_NAME(NAME, OpenBinaryBasicStructure)) { + SCOPED_TRACE("opening cryptsample NAME"); + InformationManager manager; + + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + llvm::InitializeAllDisassemblers(); + + manager.reset(std::string(TEST_DATA_DIRECTORY) + + "FILENAME"); + + ASSERT_NE(nullptr, manager.getDisassembler()); + EXPECT_EQ(ENTRY, manager.getDisassembler()->entryAddress()); + testCheckFunction(manager.getFunction(TEST_ENTRY)); + testMainFunction(manager.getFunction(MAIN_ENTRY)); +} + +TEST(llvmDisassemblerTest, GEN_NAME(NAME, LoadBinaryBasicStructure)) { + SCOPED_TRACE("loading cryptsample NAME"); + InformationManager manager; + + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + llvm::InitializeAllDisassemblers(); + + manager.load(std::string(TEST_DATA_DIRECTORY) + + "FILENAME.frida"); + + ASSERT_NE(nullptr, manager.getDisassembler()); + EXPECT_EQ(ENTRY, manager.getDisassembler()->entryAddress()); + testCheckFunction(manager.getFunction(TEST_ENTRY)); + testMainFunction(manager.getFunction(MAIN_ENTRY)); +}