aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-04-28 18:28:19 +0100
committerVaxry <[email protected]>2024-04-28 18:28:19 +0100
commit28c85619243e6320e75d7abcfe8244fa99d054dd (patch)
treec81b09958b2e8a07088d51d74c505f4c1d8bd8c9
parent82a6fba6ec0c5a667582b9ad48adadc36bef2702 (diff)
downloadHyprland-28c85619243e6320e75d7abcfe8244fa99d054dd.tar.gz
Hyprland-28c85619243e6320e75d7abcfe8244fa99d054dd.zip
hooksystem: use a random 700 directory for assembler
-rw-r--r--src/plugins/HookSystem.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/plugins/HookSystem.cpp b/src/plugins/HookSystem.cpp
index 59654816..5082f54c 100644
--- a/src/plugins/HookSystem.cpp
+++ b/src/plugins/HookSystem.cpp
@@ -1,6 +1,7 @@
#include "HookSystem.hpp"
#include "../debug/Log.hpp"
#include "../helpers/VarList.hpp"
+#include "../managers/TokenManager.hpp"
#define register
#include <udis86.h>
@@ -135,24 +136,30 @@ CFunctionHook::SAssembly CFunctionHook::fixInstructionProbeRIPCalls(const SInstr
currentAddress += len;
}
- std::ofstream ofs("/tmp/hypr/.hookcode.asm", std::ios::trunc);
+ const auto RANDOMDIR = "/tmp/hypr/" + g_pTokenManager->getRandomUUID();
+
+ if (!std::filesystem::create_directory(RANDOMDIR))
+ return {};
+
+ std::filesystem::permissions(RANDOMDIR, std::filesystem::perms::owner_all, std::filesystem::perm_options::replace);
+
+ std::ofstream ofs(RANDOMDIR + "/.hookcode.asm", std::ios::trunc);
ofs << assemblyBuilder;
ofs.close();
- std::string ret = execAndGet(
- "cc -x assembler -c /tmp/hypr/.hookcode.asm -o /tmp/hypr/.hookbinary.o 2>&1 && objcopy -O binary -j .text /tmp/hypr/.hookbinary.o /tmp/hypr/.hookbinary2.o 2>&1");
+ std::string ret = execAndGet(std::string{"cc -x assembler -c " + RANDOMDIR + "/.hookcode.asm -o " + RANDOMDIR + "/.hookbinary.o 2>&1 && objcopy -O binary -j .text " +
+ RANDOMDIR + "/.hookbinary.o " + RANDOMDIR + "/.hookbinary2.o 2>&1"}
+ .c_str());
Debug::log(LOG, "[functionhook] assembler returned:\n{}", ret);
- if (!std::filesystem::exists("/tmp/hypr/.hookbinary2.o")) {
- std::filesystem::remove("/tmp/hypr/.hookcode.asm");
- std::filesystem::remove("/tmp/hypr/.hookbinary.asm");
+ if (!std::filesystem::exists(RANDOMDIR + "/.hookbinary2.o")) {
+ std::filesystem::remove(RANDOMDIR + "/.hookcode.asm");
+ std::filesystem::remove(RANDOMDIR + "/.hookbinary.asm");
return {};
}
- std::ifstream ifs("/tmp/hypr/.hookbinary2.o", std::ios::binary);
+ std::ifstream ifs(RANDOMDIR + "/.hookbinary2.o", std::ios::binary);
returns = {std::vector<char>(std::istreambuf_iterator<char>(ifs), {})};
ifs.close();
- std::filesystem::remove("/tmp/hypr/.hookcode.asm");
- std::filesystem::remove("/tmp/hypr/.hookbinary.o");
- std::filesystem::remove("/tmp/hypr/.hookbinary2.o");
+ std::filesystem::remove_all(RANDOMDIR);
return returns;
}