add logging
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user