add logging

This commit is contained in:
2025-03-20 01:57:53 +02:00
parent f537aff9a0
commit 4eafc4e61f
5 changed files with 86 additions and 31 deletions

View File

@@ -1,5 +1,9 @@
#include "symbols.h"
#include "logger.h"
#include "memory.h"
#include "types.h"
#include <dlfcn.h>
#include <elf.h>
#include <link.h>
@@ -15,6 +19,7 @@
* hold found symbols.
*/
CreateResult hi_create_symbol_info(SymbolInfos *symbols,
struct sc_array_memreg *const regions,
struct dl_phdr_info *info) {
if (!symbols)
@@ -29,15 +34,15 @@ CreateResult hi_create_symbol_info(SymbolInfos *symbols,
if (phdr->p_type != PT_DYNAMIC)
continue;
printf("Dynamic Header:\n");
printf("p_type: %u\n", phdr->p_type);
printf("p_flags: %u\n", phdr->p_flags);
printf("p_offset: %#06lx\n", phdr->p_offset);
printf("p_vaddr: %#06lx\n", phdr->p_vaddr);
printf("p_paddr: %#06lx\n", phdr->p_paddr);
printf("p_filesz: %zu\n", phdr->p_filesz);
printf("p_memsz: %zu\n", phdr->p_memsz);
printf("p_align: %zu\n", phdr->p_align);
sc_log_debug("Dynamic Header:\n");
sc_log_debug("p_type: %u\n", phdr->p_type);
sc_log_debug("p_flags: %u\n", phdr->p_flags);
sc_log_debug("p_offset: %#06lx\n", phdr->p_offset);
sc_log_debug("p_vaddr: %#06lx\n", phdr->p_vaddr);
sc_log_debug("p_paddr: %#06lx\n", phdr->p_paddr);
sc_log_debug("p_filesz: %zu\n", phdr->p_filesz);
sc_log_debug("p_memsz: %zu\n", phdr->p_memsz);
sc_log_debug("p_align: %zu\n", phdr->p_align);
const ElfW(Dyn) *dyn = (const ElfW(Dyn) *)(info->dlpi_addr + phdr->p_vaddr);
const char *strtab = NULL;
@@ -45,14 +50,25 @@ CreateResult hi_create_symbol_info(SymbolInfos *symbols,
size_t symtab_size = 0;
size_t strtab_size = 0;
// Parse the dynamic table
uptr off = info->dlpi_addr;
// Parse the dynamic table
for (; dyn->d_tag != DT_NULL; dyn++) {
if (dyn->d_tag == DT_STRTAB) {
strtab = (const char *)(dyn->d_un.d_ptr);
uptr p = dyn->d_un.d_ptr;
if (!memory_find_pointer(p, regions, NULL))
p += off;
strtab = (const char *)p;
} else if (dyn->d_tag == DT_STRSZ) {
strtab_size = dyn->d_un.d_val;
} else if (dyn->d_tag == DT_SYMTAB) {
symtab = (const ElfW(Sym) *)(dyn->d_un.d_ptr);
uptr p = dyn->d_un.d_ptr;
if (!memory_find_pointer(p, regions, NULL))
p += off;
symtab = (const ElfW(Sym) *)(p);
} else if (dyn->d_tag == DT_SYMENT) {
symtab_size = dyn->d_un.d_val;
}
@@ -65,7 +81,7 @@ CreateResult hi_create_symbol_info(SymbolInfos *symbols,
return CREATE_FAILED;
}
symbols->capacity = symtab_size / sizeof(ElfW(Sym));
symbols->capacity = symtab_size / sizeof(char);
symbols->names = calloc(symbols->capacity, sizeof(char *));
if (!symbols->names) {