guerrilla icon indicating copy to clipboard operation
guerrilla copied to clipboard

when guards are dropped out of order the original function is never restored

Open kazcw opened this issue 7 years ago • 2 comments

This is inherent to the API, as there's no reasonable interpretation of what version to "restore" in such a case; so it might just be one for the "no monkey business" section of the manual

kazcw avatar Nov 10 '18 18:11 kazcw

We should probably at least use a mutex keyed to the target function address.

mehcode avatar Nov 10 '18 18:11 mehcode

Stacked patches of the same function would trigger Mutex::lock's unspecified behavior, and dynamically-created mutexes wouldn't help the thread safety issues.

If there were a singleton Patcher object, the borrow checker could ensure stacked guards aren't dropped out of order. Sharing the Patcher between threads would require protecting it with a Mutex, which would eliminate some of the possible race conditions (the read/write one, and also the mprotect/write one, but not the write/execute one).

kazcw avatar Nov 10 '18 18:11 kazcw