rename all sc_array stuff to vector stuff

This commit is contained in:
2025-05-03 22:47:59 +03:00
parent d1bff36830
commit 487da24e65
11 changed files with 151 additions and 131 deletions

View File

@@ -33,10 +33,10 @@ static void *adjust_if_relative(void *ptr, void *module_base) {
return (void *)p;
}
static HiResult gather_patchable_symbols(struct sc_array_sym *symbols,
static HiResult gather_patchable_symbols(VectorSymbol *symbols,
const char *module_name,
void *module_base) {
sc_array_clear(symbols);
symbol_clear(symbols);
HiResult ret = HI_FAIL;
@@ -152,7 +152,7 @@ static HiResult gather_patchable_symbols(struct sc_array_sym *symbols,
.type = type,
.address = sym_addr};
sc_array_add(symbols, hisym);
vector_add(symbols, hisym);
}
}
}
@@ -226,7 +226,7 @@ static HiResult moduler_apply_module_patch(VectorSymbol *psymbols,
printf("Processing %zu relocations\n", rela_count);
size_t num_symbols = sc_array_size(psymbols);
size_t num_symbols = vector_size(psymbols);
ElfW(Rela) *r = NULL;
for (size_t i = 0; i < rela_count; i++) {
@@ -247,7 +247,7 @@ static HiResult moduler_apply_module_patch(VectorSymbol *psymbols,
// Check if this is a symbol we want to patch
for (size_t j = 0; j < num_symbols; j++) {
Symbol *sym = &sc_array_at(psymbols, j);
Symbol *sym = &vector_at(psymbols, j);
if (strcmp(sym->name, name) == 0) {
sym->got_entry = got_entry;
sym->orig_address = *got_entry; // Save the original function
@@ -260,7 +260,6 @@ static HiResult moduler_apply_module_patch(VectorSymbol *psymbols,
}
}
}
elf_end(elf);
return HI_OK;
}
@@ -324,13 +323,16 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
patch.dlhandle = new_handle;
// refresh cache
memmaps_from_process(memmaps);
if (!HIOK(memmaps_from_process(memmaps))) {
log_error("Failed to collect memory information for process\n");
return HI_FAIL;
}
patch.memreg = memmaps_find_by_name(patch.filename, memmaps);
void *patch_base = (void *)patch.memreg.start;
VectorSymbol patch_symbols;
symbol_init_symbols(&patch_symbols);
symbol_init(&patch_symbols);
HiResult ret =
gather_patchable_symbols(&patch_symbols, patch.filename, patch_base);
@@ -339,8 +341,8 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
return HI_FAIL;
}
for (size_t i = 0; i < sc_array_size(modules); ++i) {
ModuleData mod = sc_array_at(modules, i);
for (size_t i = 0; i < vector_size(modules); ++i) {
ModuleData mod = vector_at(modules, i);
if (!hi_modinfo_has(mod.info, HI_MODULE_STATE_PATCHABLE))
continue;
@@ -354,18 +356,18 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
// coping those over.
VectorSymbol module_symbols;
symbol_init_symbols(&module_symbols);
symbol_init(&module_symbols);
ret = gather_patchable_symbols(&module_symbols, mod.name,
(void *)mod.address);
if (!HIOK(ret)) {
log_error("Failed to gather symbols for %s\n", mod.name);
symbol_term_symbols(&module_symbols);
symbol_term(&module_symbols);
continue;
}
// Copy old data to new data. Breaks with layout changes.
for (size_t i = 0; i < sc_array_size(&module_symbols); ++i) {
Symbol *sym = &sc_array_at(&module_symbols, i);
for (size_t i = 0; i < vector_size(&module_symbols); ++i) {
Symbol *sym = &vector_at(&module_symbols, i);
if (sym->type == HI_SYMBOL_TYPE_OBJECT) {
Symbol *ps = symbol_find(&patch_symbols, sym);
if (ps) {
@@ -378,14 +380,14 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
}
}
}
symbol_term_symbols(&module_symbols);
symbol_term(&module_symbols);
}
module->info = hi_modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
}
free((char *)patch.filename);
symbol_term_symbols(&patch_symbols);
symbol_term(&patch_symbols);
dlclose(module->dlhandle);
module->dlhandle = patch.dlhandle;