diff --git a/lsplt/src/main/jni/lsplt.cc b/lsplt/src/main/jni/lsplt.cc index 83fede5..446157d 100644 --- a/lsplt/src/main/jni/lsplt.cc +++ b/lsplt/src/main/jni/lsplt.cc @@ -164,11 +164,12 @@ public: info.hooks.clear(); continue; } - mprotect(reinterpret_cast(info.start), len, PROT_WRITE); - for (auto &[addr, backup] : info.hooks) { - *reinterpret_cast(addr) = backup; + if (!mprotect(reinterpret_cast(info.start), len, PROT_WRITE)) { + for (auto &[addr, backup] : info.hooks) { + *reinterpret_cast(addr) = backup; + } + mprotect(reinterpret_cast(info.start), len, info.perm); } - mprotect(reinterpret_cast(info.start), len, info.perm); info.hooks.clear(); info.backup = 0; }