1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-07 07:47:36 +00:00
serenity/DevTools/UserspaceEmulator/CMakeLists.txt
Andreas Kling c314292319 UserspaceEmulator: Catch use-after-frees by tracking malloc/free :^)
This patch introduces a "MallocTracer" to the UserspaceEmulator.
If this object is present on the Emulator, it can be notified whenever
the emulated program does a malloc() or free().

The notifications come in via a magic instruction sequence that we
embed in the LibC malloc() and free() functions. The sequence is:

    "salc x2, push reg32 x2, pop reg32 x3"

The data about the malloc/free operation is in the three pushes.
We make sure the sequence is harmless when running natively.

Memory accesses on MmapRegion are then audited to see if they fall
inside a known-to-be-freed malloc chunk. If so, we complain loud
and red in the debugger output. :^)

This is very, very cool! :^)

It's also a whole lot slower than before, since now we're auditing
memory accesses against a new set of metadata. This will need to be
optimized (and running in this mode should be opt-in, perhaps even
a separate program, etc.)
2020-07-15 23:25:20 +02:00

13 lines
253 B
CMake

set(SOURCES
Emulator.cpp
MallocTracer.cpp
MmapRegion.cpp
SharedBufferRegion.cpp
SimpleRegion.cpp
SoftCPU.cpp
SoftMMU.cpp
main.cpp
)
serenity_bin(UserspaceEmulator)
target_link_libraries(UserspaceEmulator LibX86 LibCore)