コード例 #1
0
ファイル: drsyms_linux.c プロジェクト: Arunpreet/dynamorio
static drsym_error_t
drsym_enumerate_symbols_local(const char *modpath, drsym_enumerate_cb callback,
                              drsym_enumerate_ex_cb callback_ex, size_t info_size,
                              void *data, uint flags)
{
    void *mod;
    drsym_error_t r;

    if (modpath == NULL || (callback == NULL && callback_ex == NULL))
        return DRSYM_ERROR_INVALID_PARAMETER;

    dr_recurlock_lock(symbol_lock);
    mod = lookup_or_load(modpath);
    if (mod == NULL) {
        dr_recurlock_unlock(symbol_lock);
        return DRSYM_ERROR_LOAD_FAILED;
    }

    recursive_context = true;
    r = drsym_unix_enumerate_symbols(mod, callback, callback_ex, info_size, data, flags);
    recursive_context = false;

    dr_recurlock_unlock(symbol_lock);
    return r;
}
コード例 #2
0
drmf_status_t
drsyscall_os_init(void *drcontext)
{
    uint i;
    hashtable_init_ex(&systable, SYSTABLE_HASH_BITS, HASH_INTPTR, false/*!strdup*/,
                      false/*!synch*/, NULL, sysnum_hash, sysnum_cmp);
    /* We initialize & leave secondary_systable empty to be in sync with our
     * Windows & Linux solutions. Xref i#1438 i#1549.
     */
    hashtable_init_ex(&secondary_systable, SECONDARY_SYSTABLE_HASH_BITS,
                      HASH_INTPTR, false/*!strdup*/, false/*!synch*/, NULL,
                      sysnum_hash, sysnum_cmp);

    hashtable_init(&name2num_table, NAME2NUM_TABLE_HASH_BITS, HASH_STRING,
                   false/*!strdup*/);

    dr_recurlock_lock(systable_lock);
    for (i = 0; i < count_syscall_info_bsd; i++) {
        IF_DEBUG(bool ok =)
            hashtable_add(&systable, (void *) &syscall_info_bsd[i].num,
                          (void *) &syscall_info_bsd[i]);
        ASSERT(ok, "no dups");

        IF_DEBUG(ok =)
            hashtable_add(&name2num_table, (void *) syscall_info_bsd[i].name,
                          (void *) &syscall_info_bsd[i].num);
        ASSERT(ok || strcmp(syscall_info_bsd[i].name, "ni_syscall") == 0, "no dups");
    }
    dr_recurlock_unlock(systable_lock);
    return DRMF_SUCCESS;
}