Bladeren bron

LibDebug: Assert that we can read the executable of the debugee

Itamar 4 jaren geleden
bovenliggende
commit
b5f6a1a9e8
2 gewijzigde bestanden met toevoegingen van 13 en 4 verwijderingen
  1. 9 2
      Libraries/LibDebug/DebugSession.cpp
  2. 4 2
      Libraries/LibDebug/DebugSession.h

+ 9 - 2
Libraries/LibDebug/DebugSession.cpp

@@ -30,12 +30,19 @@
 
 DebugSession::DebugSession(int pid)
     : m_debugee_pid(pid)
-    , m_executable(String::format("/proc/%d/exe", pid))
-    , m_elf(ELF::Loader::create(reinterpret_cast<u8*>(m_executable.data()), m_executable.size()))
+    , m_executable(initialize_executable_mapped_file(pid))
+    , m_elf(ELF::Loader::create(reinterpret_cast<const u8*>(m_executable->data()), m_executable->size()))
     , m_debug_info(m_elf)
 {
 }
 
+NonnullOwnPtr<const MappedFile> DebugSession::initialize_executable_mapped_file(int pid)
+{
+    auto executable = adopt_own(*new MappedFile(String::format("/proc/%d/exe", pid)));
+    ASSERT(executable->is_valid());
+    return executable;
+}
+
 DebugSession::~DebugSession()
 {
     for (const auto& bp : m_breakpoints) {

+ 4 - 2
Libraries/LibDebug/DebugSession.h

@@ -98,7 +98,7 @@ public:
 
     const ELF::Loader& elf() const { return *m_elf; }
     NonnullRefPtr<const ELF::Loader> elf_ref() const { return m_elf; }
-    const MappedFile& executable() const { return m_executable; }
+    const MappedFile& executable() const { return *m_executable; }
     const DebugInfo& debug_info() const { return m_debug_info; }
 
     enum DebugDecision {
@@ -119,10 +119,12 @@ private:
     // x86 breakpoint instruction "int3"
     static constexpr u8 BREAKPOINT_INSTRUCTION = 0xcc;
 
+    static NonnullOwnPtr<const MappedFile> initialize_executable_mapped_file(int pid);
+
     int m_debugee_pid { -1 };
     bool m_is_debugee_dead { false };
 
-    MappedFile m_executable;
+    NonnullOwnPtr<const MappedFile> m_executable;
     NonnullRefPtr<const ELF::Loader> m_elf;
     DebugInfo m_debug_info;