def corefile(self): """corefile() -> pwnlib.elf.elf.Core Returns a corefile for the process. If the process is alive, attempts to create a coredump with GDB. If the process is dead, attempts to locate the coredump created by the kernel. """ # If the process is still alive, try using GDB import pwnlib.elf.corefile import pwnlib.gdb if self.poll() is None: return pwnlib.gdb.corefile(self) finder = pwnlib.elf.corefile.CorefileFinder(self) if not finder.core_path: self.warn("Could not find core file for pid %i" % self.pid) return core_hash = sha256file(finder.core_path) if self._corefile and self._corefile._hash == core_hash: return self._corefile self._corefile = pwnlib.elf.corefile.Corefile(finder.core_path) self._corefile._hash = core_hash return self._corefile
def corefile(self): """corefile() -> pwnlib.elf.elf.Core Returns a corefile for the process. If the process is alive, attempts to create a coredump with GDB. If the process is dead, attempts to locate the coredump created by the kernel. """ # If the process is still alive, try using GDB import pwnlib.elf.corefile import pwnlib.gdb try: if self.poll() is None: corefile = pwnlib.gdb.corefile(self) if corefile is None: self.error("Could not create corefile with GDB for %s", self.executable) return corefile # Handle race condition against the kernel or QEMU to write the corefile # by waiting up to 5 seconds for it to be written. t = Timeout() finder = None with t.countdown(5): while t.timeout and (finder is None or not finder.core_path): finder = pwnlib.elf.corefile.CorefileFinder(self) time.sleep(0.5) if not finder.core_path: self.error("Could not find core file for pid %i" % self.pid) core_hash = sha256file(finder.core_path) if self._corefile and self._corefile._hash == core_hash: return self._corefile self._corefile = pwnlib.elf.corefile.Corefile(finder.core_path) except AttributeError as e: raise RuntimeError(e) # AttributeError would route through __getattr__, losing original message self._corefile._hash = core_hash return self._corefile
def corefile(self): """corefile() -> pwnlib.elf.elf.Core Returns a corefile for the process. If the process is alive, attempts to create a coredump with GDB. If the process is dead, attempts to locate the coredump created by the kernel. """ # If the process is still alive, try using GDB import pwnlib.elf.corefile import pwnlib.gdb try: if self.poll() is None: return pwnlib.gdb.corefile(self) finder = pwnlib.elf.corefile.CorefileFinder(self) if not finder.core_path: self.warn("Could not find core file for pid %i" % self.pid) return None core_hash = sha256file(finder.core_path) if self._corefile and self._corefile._hash == core_hash: return self._corefile self._corefile = pwnlib.elf.corefile.Corefile(finder.core_path) except AttributeError as e: raise RuntimeError( e ) # AttributeError would route through __getattr__, losing original message self._corefile._hash = core_hash return self._corefile