mirror of
https://github.com/RGBCube/serenity
synced 2025-07-07 07:47:36 +00:00

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.)
13 lines
253 B
CMake
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)
|