Exemplo n.º 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);
}
Exemplo n.º 2
0
void
v2p_cache_set(
    vmi_instance_t vmi,
    addr_t va,
    addr_t dtb,
    addr_t pa)
{
    if (!va || !dtb || !pa) {
        return;
    }
    key_128_t key = key_128_build(vmi, (uint64_t)va, (uint64_t)dtb);
    v2p_cache_entry_t entry = v2p_cache_entry_create(vmi, pa);
    g_hash_table_insert(vmi->v2p_cache, key, entry);
    dbprint(VMI_DEBUG_V2PCACHE, "--V2P cache set 0x%.16"PRIx64" -- 0x%.16"PRIx64" (0x%.16"PRIx64"/0x%.16"PRIx64")\n", va,
            pa, key->high, key->low);
}
Exemplo n.º 3
0
Arquivo: shm.c Projeto: bentau/libvmi
void
v2m_cache_set(
    vmi_instance_t vmi,
    addr_t va,
    pid_t pid,
    addr_t ma,
    uint64_t length)
{
    if (!va || !ma) {
        return;
    }
    key_128_t key = key_128_build(vmi, (uint64_t)va, (uint64_t)pid);
    v2m_cache_entry_t entry = v2m_cache_entry_create(vmi, ma, length);
    g_hash_table_insert(vmi->v2m_cache, key, entry);
    dbprint(VMI_DEBUG_V2MCACHE, "--v2m cache set 0x%.16"PRIx64" -- 0x%.16"PRIx64" len 0x%.16"PRIx64" (0x%.16"PRIx64"/0x%.16"PRIx64")\n", va,
            ma, length, key->high, key->low);
}
Exemplo n.º 4
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);
}