clarify memory module to memmap module

This commit is contained in:
2025-05-03 19:00:54 +03:00
parent a4af280cda
commit d1bff36830
14 changed files with 146 additions and 124 deletions

View File

@@ -5,7 +5,7 @@
#include "hielf.h"
#include "histring.h"
#include "logger.h"
#include "memory.h"
#include "memmap.h"
#include "symbols.h"
#include "types.h"
@@ -22,7 +22,7 @@
typedef struct {
const char *filename;
void *dlhandle;
MemoryRegionSpan memreg;
MemorySpan memreg;
} PatchData;
static void *adjust_if_relative(void *ptr, void *module_base) {
@@ -168,10 +168,10 @@ cleanup:
}
static HiResult moduler_apply_module_patch(VectorSymbol *psymbols,
MemoryRegionSpan module_memory) {
MemorySpan module_memory) {
void *module_base = (void *)module_memory.region_start;
size_t module_size = module_memory.region_end - module_memory.region_start;
void *module_base = (void *)module_memory.start;
size_t module_size = module_memory.end - module_memory.start;
void *plt = NULL;
ElfW(Rela) *jmprel = NULL;
@@ -296,7 +296,7 @@ PatchData moduler_create_patch(ModuleData *module) {
}
HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
struct sc_array_memreg *memregs) {
VectorMemoryMap *memmaps) {
// Return OK because this isn't an error case. We just don't do it yet
// because we only handle reloading a complete solib. Can't do that with
@@ -324,10 +324,10 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
patch.dlhandle = new_handle;
// refresh cache
read_memory_maps_self(memregs);
memmaps_from_process(memmaps);
patch.memreg = memory_get_module_span(memregs, patch.filename);
void *patch_base = (void *)patch.memreg.region_start;
patch.memreg = memmaps_find_by_name(patch.filename, memmaps);
void *patch_base = (void *)patch.memreg.start;
VectorSymbol patch_symbols;
symbol_init_symbols(&patch_symbols);
@@ -346,7 +346,7 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
continue;
log_debug("Patching: %s\n", mod.name);
MemoryRegionSpan module_memory = memory_get_module_span(memregs, mod.name);
MemorySpan module_memory = memmaps_find_by_name(mod.name, memmaps);
moduler_apply_module_patch(&patch_symbols, module_memory);
if (strncmp(mod.name, patch.filename, strlen(mod.name)) == 0) {