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:
+34
-3
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user