Esempio n. 1
0
bfelf64_sword
bfelf_file_resolve_symbol(struct bfelf_file_t *ef,
                          struct e_string_t *name,
                          void **addr)
{
    bfelf64_sword ret = 0;
    struct bfelf_sym *found_sym = 0;

    if (!ef)
        return invalid_argument("ef == NULL");

    if (!name)
        return invalid_argument("name == NULL");

    if (!addr)
        return invalid_argument("addr == NULL");

    if (ef->relocated == 0)
        return out_of_order("you need to call bfelf_loader_relocate first");

    ret = private_symbol_by_name(ef, name, &found_sym);
    if (ret != BFELF_SUCCESS)
        return ret;

    ret = private_resolve_symbol(ef, found_sym, addr);
    if (ret != BFELF_SUCCESS)
        return ret;

    return BFELF_SUCCESS;
}
Esempio n. 2
0
int64_t
bfelf_loader_resolve_symbol(struct bfelf_loader_t *loader,
                            struct e_string_t *name,
                            void **addr)
{
    int64_t ret = 0;

    struct bfelf_sym *found_sym = 0;
    struct bfelf_file_t *found_ef = 0;

    if (!loader)
        return invalid_argument("loader == NULL");

    if (!name)
        return invalid_argument("name == NULL");

    if (!addr)
        return invalid_argument("addr == NULL");

    if (loader->relocated == 0)
        return out_of_order("you need to call bfelf_loader_relocate first");

    ret = private_symbol_global(loader, name, &found_ef, &found_sym);
    if (ret != BFELF_SUCCESS)
        return ret;

    ret = private_resolve_symbol(found_ef, found_sym, addr);
    if (ret != BFELF_SUCCESS)
        return ret;

    return BFELF_SUCCESS;
}