rename all sc_array stuff to vector stuff
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user