PatchworkOS  966e257
A non-POSIX operating system.
Loading...
Searching...
No Matches
elf64_get_symbol_by_name.c
Go to the documentation of this file.
1#include "common/elf.h"
2
3Elf64_Sym* elf64_get_symbol_by_name(const Elf64_File* elf, const char* name)
4{
5 if (elf == NULL || name == NULL)
6 {
7 return NULL;
8 }
9
10 if (elf->symtab == NULL)
11 {
12 return NULL;
13 }
14
15 uint64_t symCount = elf->symtab->sh_size / elf->symtab->sh_entsize;
16 void* symTableBase = ELF64_AT_OFFSET(elf, elf->symtab->sh_offset);
17 Elf64_Shdr* strtabHdr = ELF64_GET_SHDR(elf, elf->symtab->sh_link);
18 char* strTable = ELF64_AT_OFFSET(elf, strtabHdr->sh_offset);
19
20 for (uint64_t i = 0; i < symCount; i++)
21 {
22 Elf64_Sym* symbol = (Elf64_Sym*)((uintptr_t)symTableBase + (i * elf->symtab->sh_entsize));
23 const char* symbolName = &strTable[symbol->st_name];
24 if (elf_strcmp(symbolName, name) == 0)
25 {
26 return symbol;
27 }
28 }
29
30 return NULL;
31}
#define ELF64_AT_OFFSET(elf, offset)
Get a pointer to a location in the ELF file at the given offset.
Definition elf.h:814
Elf64_Sym * elf64_get_symbol_by_name(const Elf64_File *elf, const char *name)
Get a symbol by its name from the symbol table.
#define ELF64_GET_SHDR(elf, index)
Get the section header at the given index from an ELF file.
Definition elf.h:805
#define NULL
Pointer error value.
Definition NULL.h:23
#define elf_strcmp
Definition elf.h:34
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:43
ELF File Helper structure.
Definition elf.h:781
Elf64_Shdr * symtab
The symbol table section, or NULL if not found.
Definition elf.h:784
ELF64 Section Header.
Definition elf.h:468
Elf64_Word sh_link
Definition elf.h:475
Elf64_Xword sh_entsize
Definition elf.h:479
Elf64_Xword sh_size
Section size in bytes.
Definition elf.h:474
Elf64_Off sh_offset
Section's file offset in bytes.
Definition elf.h:473
ELF64 Symbol Table Entry.
Definition elf.h:543
Elf64_Word st_name
Definition elf.h:544