]> git.siccegge.de Git - frida/frida.git/blobdiff - src/disassembler/llvm/LLVMDisassembler.cxx
Add in an Information Manager
[frida/frida.git] / src / disassembler / llvm / LLVMDisassembler.cxx
index 6b3402eb0b2414d56c4b415f7467e3c29d7e33cd..7f87b80116068fc6c6d88cafae059b2839c14400 100644 (file)
@@ -14,10 +14,12 @@ using std::error_code;
  * ist sondern z.B. einfach nur Instruktionen oder ein Bootsektor oder
  * foo
  */
  * ist sondern z.B. einfach nur Instruktionen oder ein Bootsektor oder
  * foo
  */
-LLVMDisassembler::LLVMDisassembler(const std::string& filename)
-    : Disassembler(filename)
+LLVMDisassembler::LLVMDisassembler(const std::string& filename,
+                                   InformationManager* manager)
+       : Disassembler(filename, manager)
     , logger(log4cxx::Logger::getLogger("LLVMDisassembler"))
     , triple("unknown-unknown-unknown")
     , logger(log4cxx::Logger::getLogger("LLVMDisassembler"))
     , triple("unknown-unknown-unknown")
+    , manager(manager)
 {
     LOG4CXX_DEBUG(logger, "Handling file" << filename);
     auto result = createBinary(filename);
 {
     LOG4CXX_DEBUG(logger, "Handling file" << filename);
     auto result = createBinary(filename);
@@ -111,7 +113,9 @@ LLVMDisassembler::LLVMDisassembler(const std::string& filename)
     std::unique_ptr<MCObjectDisassembler> OD(
         new MCObjectDisassembler(*o, *DisAsm, *MIA));
     Mod.reset(OD->buildModule(false));
     std::unique_ptr<MCObjectDisassembler> OD(
         new MCObjectDisassembler(*o, *DisAsm, *MIA));
     Mod.reset(OD->buildModule(false));
+}
 
 
+void LLVMDisassembler::start() {
     readSymbols();
     readSections();
     disassemble();
     readSymbols();
     readSections();
     disassemble();
@@ -231,6 +235,7 @@ void LLVMDisassembler::disassembleFunction(LLVMFunction* function) {
         }
     }
     LOG4CXX_DEBUG(logger, "Finished function " << function->getName());
         }
     }
     LOG4CXX_DEBUG(logger, "Finished function " << function->getName());
+    manager->signal_new_function(function);
 }
 
 void LLVMDisassembler::disassemble() {
 }
 
 void LLVMDisassembler::disassemble() {