diff options
Diffstat (limited to 'DevTools')
-rw-r--r-- | DevTools/UserspaceEmulator/Emulator.cpp | 11 | ||||
-rw-r--r-- | DevTools/UserspaceEmulator/Emulator.h | 5 |
2 files changed, 14 insertions, 2 deletions
diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index d8ac88057e..fac2bf92b6 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -125,6 +125,14 @@ bool Emulator::load_elf() }); m_cpu.set_eip(m_elf->image().entry().get()); + + auto malloc_symbol = m_elf->find_demangled_function("malloc"); + auto free_symbol = m_elf->find_demangled_function("free"); + + m_malloc_symbol_start = malloc_symbol.value().value(); + m_malloc_symbol_end = m_malloc_symbol_start + malloc_symbol.value().size(); + m_free_symbol_start = free_symbol.value().value(); + m_free_symbol_end = m_free_symbol_start + free_symbol.value().size(); return true; } @@ -170,8 +178,7 @@ int Emulator::exec() bool Emulator::is_in_malloc_or_free() const { - auto symbol = m_elf->symbolicate(m_cpu.eip()); - return symbol.starts_with("malloc") || symbol.starts_with("free"); + return (m_cpu.eip() >= m_malloc_symbol_start && m_cpu.eip() < m_malloc_symbol_end) || (m_cpu.eip() >= m_free_symbol_start && m_cpu.eip() < m_free_symbol_end); } static pid_t s_pid = getpid(); diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index fbfcfee319..cd15c61400 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -117,6 +117,11 @@ private: bool m_shutdown { false }; int m_exit_status { 0 }; + + FlatPtr m_malloc_symbol_start { 0 }; + FlatPtr m_malloc_symbol_end { 0 }; + FlatPtr m_free_symbol_start { 0 }; + FlatPtr m_free_symbol_end { 0 }; }; } |