mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-08 17:09:41 +00:00
UserspaceEmulator: Cache the location and size of "malloc" and "free"
This allows us to quickly skip some auditing checks while we're inside malloc/free themselves.
This commit is contained in:
parent
862ab82c19
commit
67cdbe1925
|
@ -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();
|
||||
|
|
|
@ -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 };
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue