refactor/feat: Further signature scan changes

> funcionality cleanup, API compatibility should be the same
> improve patching performance by skipping vector copy (replaced with span)
> chain call wrapper (fixes soudbank hook breaking 32-bit styles)
This commit is contained in:
[ ]
2026-02-20 18:36:42 +09:00
parent a7723148bc
commit ce0344742e
4 changed files with 91 additions and 48 deletions
+34 -3
View File
@@ -5,11 +5,21 @@
#include <cstdint>
#include <vector>
#include <filesystem>
#include <span>
#include "windows.h"
#include "psapi.h"
intptr_t find_pattern(
std::vector<unsigned char> &data,
std::span<const unsigned char> data,
intptr_t base,
const unsigned char *pattern,
const char *mask,
intptr_t offset,
intptr_t usage,
bool reverse = false);
intptr_t find_pattern(
const std::vector<unsigned char> &data,
intptr_t base,
const unsigned char *pattern,
const char *mask,
@@ -34,7 +44,17 @@ intptr_t find_pattern(
bool reverse = false);
intptr_t find_pattern_from(
std::vector<unsigned char> &data,
std::span<const unsigned char> data,
intptr_t base,
const unsigned char *pattern,
const char *mask,
intptr_t offset,
intptr_t usage,
intptr_t start_from,
bool reverse = false);
intptr_t find_pattern_from(
const std::vector<unsigned char> &data,
intptr_t base,
const unsigned char *pattern,
const char *mask,
@@ -149,4 +169,15 @@ enum REG : unsigned short
intptr_t find_asm_leacstr_from(
HMODULE module,
reg_t reg,
const char *cstr);
const char *cstr);
std::span<const unsigned char> get_module_data(HMODULE hmodule, intptr_t *base);
template <typename... Funcs>
intptr_t patch_pipeline(HMODULE module, Funcs&&... cbs) {
intptr_t base;
if(!get_module_data(module, &base).size()) return 0;
intptr_t addr = base; //_REV: needs implementing module updating logic in case of traversing between libraries
((addr && (addr = std::forward<Funcs>(cbs)(module, addr - base))), ...); // stop on first mismatch
return addr;
}