Пример #1
0
void
sym_cache_set(
    vmi_instance_t vmi,
    addr_t base_addr,
    vmi_pid_t pid,
    const char *sym,
    addr_t va)
{
    GHashTable *symbol_table = NULL;
    sym_cache_entry_t entry = sym_cache_entry_create(sym, va, base_addr, pid);
    char* sym_dup = NULL;

    key_128_t key = key_128_build(vmi, (uint64_t)base_addr, (uint64_t)pid);

    symbol_table = g_hash_table_lookup(vmi->sym_cache, key);
    if (symbol_table == NULL) {
        symbol_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
                              sym_cache_entry_free);
        g_hash_table_insert(vmi->sym_cache, key, symbol_table);
    } else {
        free(key);
    }

    sym_dup = strndup(sym, 100);
    g_hash_table_insert(symbol_table, sym_dup, entry);
    dbprint(VMI_DEBUG_SYMCACHE, "--SYM cache set %s -- 0x%.16"PRIx64"\n", sym, va);
}
Пример #2
0
void
sym_cache_set(
    vmi_instance_t vmi,
    char *sym,
    addr_t va)
{
    sym_cache_entry_t entry = sym_cache_entry_create(sym, va);

    g_hash_table_insert(vmi->sym_cache, sym, entry);
    dbprint("--SYM cache set %s -- 0x%.16"PRIx64"\n", sym, va);
}
Пример #3
0
void
rva_cache_set(
    vmi_instance_t vmi,
    addr_t base_addr,
    addr_t dtb,
    addr_t rva,
    char *sym)
{
    GHashTable *rva_table = NULL;
    sym_cache_entry_t entry = sym_cache_entry_create(sym, rva, base_addr, dtb);

    key_128_t key = key_128_build(vmi, (uint64_t)base_addr, (uint64_t)dtb);

    if ((rva_table = g_hash_table_lookup(vmi->rva_cache, key)) == NULL) {
        rva_table = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
                              sym_cache_entry_free);
        g_hash_table_insert(vmi->rva_cache, GUINT_TO_POINTER(key), rva_table);
    } else {
        free(key);
    }

    g_hash_table_insert(rva_table, GUINT_TO_POINTER(rva), entry);
    dbprint(VMI_DEBUG_RVACACHE, "--RVA cache set %s -- 0x%.16"PRIx64"\n", sym, rva);
}