#include <common.h> #include <debug.h> #include <libelf.h> #include <hash.h> #include <string.h> int hash_lookup(Elf *elf, Elf_Data *hash, Elf_Data *symtab, Elf_Data *symstr, const char *symname) { Elf32_Word *hash_data = (Elf32_Word *)hash->d_buf; Elf32_Word index; Elf32_Word nbuckets = *hash_data++; Elf32_Word *buckets = ++hash_data; Elf32_Word *chains = hash_data + nbuckets; index = buckets[elf_hash(symname) % nbuckets]; while (index != STN_UNDEF && strcmp((char *)symstr->d_buf + ((Elf32_Sym *)symtab->d_buf)[index].st_name, symname)) { index = chains[index]; } return index; }