]> git.siccegge.de Git - frida/frida.git/blobdiff - src/disassembler/llvm/LLVMDisassembler.cxx
Disable buildModule
[frida/frida.git] / src / disassembler / llvm / LLVMDisassembler.cxx
index 990ed4f53c19c6f24255d2fb735d1bedb4ba8722..45cd04e25566d97f830df05be7a00f42ffbe29a8 100644 (file)
@@ -3,6 +3,7 @@
 #include "core/InformationManager.hxx"
 #include "core/Function.hxx"
 #include "core/BasicBlock.hxx"
+#include <boost/algorithm/string.hpp>
 
 #include <stack>
 #include <algorithm>
@@ -26,12 +27,22 @@ namespace {
  *
  */
 Disassembler * createLLVMDisassembler(const std::string& filename, InformationManager* manager) {
+       log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("disassembler.LLVMDisassembler"));
        if (filename == "")
                return NULL;
 
-       std::unique_ptr<Binary> o;
-       o.reset(createBinary(filename).get());
-       Binary * op = o.release();
+       auto retval = createBinary(filename);
+       if (error_code ec = retval.getError()) {
+               LOG4CXX_ERROR(logger, ec.message());
+               return NULL;
+       }
+
+       Binary * op = retval.get();
+
+       if (!op) {
+               LOG4CXX_ERROR(logger, "Could not open " << filename);
+               return NULL;
+       }
 
        // ELFType<endian, maxalign, 64bit>
        if (ELF32LEObjectFile * object = dyn_cast<ELF32LEObjectFile>(op)) {
@@ -167,7 +178,7 @@ LLVMDisassembler<ELFT>::LLVMDisassembler(const std::string& filename,
 
        std::unique_ptr<MCObjectDisassembler> OD(
                new MCObjectDisassembler(*o, *DisAsm, *MIA));
-       Mod.reset(OD->buildModule(false));
+       //Mod.reset(OD->buildModule(false));
 
        readSections();
 }
@@ -563,7 +574,7 @@ std::vector<Instruction> LLVMDisassembler<ELFT>::getInstructions(const BasicBloc
                                stream << std::hex << (base_address + jmptarget);
                                ref = stream.str();
                        }
-                       result.push_back(Instruction(current_address + base_address, s.str(),
+                       result.push_back(Instruction(current_address + base_address, boost::algorithm::trim_copy(s.str()),
                                                     std::vector<uint8_t>(bytes, bytes+inst_size), ref));
                } else {
                        LOG4CXX_WARN(logger, "Invalid byte at" << std::hex << current_address + base_address);