0
点赞
收藏
分享

微信扫一扫

【Linux】深入理解系统文件操作(1w字超详解)

眼君 2023-10-31 阅读 44

referenced:https://flapenguin.me/elf-dt-gnu-hash

Let's start with the hashing function. It can be found in bfd_elf_gnu_hash or in dl_new_hash.

#include <stdint.h>

uint32_t gnu_hash(const uint8_t* name) {
    uint32_t h = 5381;

    for (; *name; name++) {
        h = (h << 5) + h + *name;
    }

    return h;
}

gnu_hash("")                == 0x00001505
gnu_hash("printf")          == 0x156b2bb8
gnu_hash("exit")            == 0x7c967e3f
gnu_hash("syscall")         == 0xbac212a0
struct gnu_hash_table {
    uint32_t nbuckets;
    uint32_t symoffset;
    uint32_t bloom_size;
    uint32_t bloom_shift;
    uint64_t bloom[bloom_size]; /* uint32_t for 32-bit binaries */
    uint32_t buckets[nbuckets];
    uint32_t chain[];
};
举报

相关推荐

0 条评论