mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-03 13:41:59 -07:00
Fix not finding function symbols for hooking (#2292)
Fixes no useful feedback about failing subcommand. Fixes function hooks breaking when running under a path containing spaces. Replaced old usages with this function where possible. Complex shell usages now use `execAndGetShell` which is equal to the old function.
This commit is contained in:
@@ -280,11 +280,11 @@ APICALL std::vector<SFunctionMatch> HyprlandAPI::findFunctionsByName(HANDLE hand
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
static const auto SYMBOLS = execAndGet(("llvm-nm -D -j " + FPATH.string()).c_str());
|
||||
static const auto SYMBOLSDEMANGLED = execAndGet(("llvm-nm -D -j --demangle " + FPATH.string()).c_str());
|
||||
static const auto SYMBOLS = execAndGet(("llvm-nm -D -j \"" + FPATH.string() + "\"").c_str());
|
||||
static const auto SYMBOLSDEMANGLED = execAndGet(("llvm-nm -D -j --demangle \"" + FPATH.string() + "\"").c_str());
|
||||
#else
|
||||
static const auto SYMBOLS = execAndGet(("nm -D -j " + FPATH.string()).c_str());
|
||||
static const auto SYMBOLSDEMANGLED = execAndGet(("nm -D -j --demangle=auto " + FPATH.string()).c_str());
|
||||
static const auto SYMBOLS = execAndGet(("nm -D -j \"" + FPATH.string() + "\"").c_str());
|
||||
static const auto SYMBOLSDEMANGLED = execAndGet(("nm -D -j --demangle=auto \"" + FPATH.string() + "\"").c_str());
|
||||
#endif
|
||||
|
||||
auto demangledFromID = [&](size_t id) -> std::string {
|
||||
@@ -301,6 +301,17 @@ APICALL std::vector<SFunctionMatch> HyprlandAPI::findFunctionsByName(HANDLE hand
|
||||
return SYMBOLSDEMANGLED.substr(pos, SYMBOLSDEMANGLED.find('\n', pos + 1) - pos);
|
||||
};
|
||||
|
||||
if (SYMBOLS.empty()) {
|
||||
Debug::log(ERR, "Unable to search for function \"%s\": no symbols found in binary (is \"%s\" in path?)", name.c_str(),
|
||||
#ifdef __clang__
|
||||
"llvm-nm"
|
||||
#else
|
||||
"nm"
|
||||
#endif
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
std::vector<SFunctionMatch> matches;
|
||||
|
||||
std::istringstream inStream(SYMBOLS);
|
||||
@@ -319,4 +330,4 @@ APICALL std::vector<SFunctionMatch> HyprlandAPI::findFunctionsByName(HANDLE hand
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user