Files
hiload/solib-auditors/auditor-x86_64.c
2025-05-03 00:34:26 +03:00

80 lines
2.9 KiB
C

#include <link.h>
#include <stdio.h>
unsigned int la_version(unsigned int version) {
printf("la_version(): version = %u; LAV_CURRENT = %u\n", version,
LAV_CURRENT);
return LAV_CURRENT;
}
char *la_objsearch(const char *name, uintptr_t *cookie, unsigned int flag) {
printf("la_objsearch(): name = %s; cookie = %p", name, cookie);
printf("; flag = %s\n", (flag == LA_SER_ORIG) ? "LA_SER_ORIG"
: (flag == LA_SER_LIBPATH) ? "LA_SER_LIBPATH"
: (flag == LA_SER_RUNPATH) ? "LA_SER_RUNPATH"
: (flag == LA_SER_DEFAULT) ? "LA_SER_DEFAULT"
: (flag == LA_SER_CONFIG) ? "LA_SER_CONFIG"
: (flag == LA_SER_SECURE) ? "LA_SER_SECURE"
: "???");
return (char *)name;
}
void la_activity(uintptr_t *cookie, unsigned int flag) {
printf("la_activity(): cookie = %p; flag = %s\n", cookie,
(flag == LA_ACT_CONSISTENT) ? "LA_ACT_CONSISTENT"
: (flag == LA_ACT_ADD) ? "LA_ACT_ADD"
: (flag == LA_ACT_DELETE) ? "LA_ACT_DELETE"
: "???");
}
unsigned int la_objopen(struct link_map *map, Lmid_t lmid, uintptr_t *cookie) {
printf("la_objopen(): loading \"%s\"; lmid = %s; cookie=%p\n", map->l_name,
(lmid == LM_ID_BASE) ? "LM_ID_BASE"
: (lmid == LM_ID_NEWLM) ? "LM_ID_NEWLM"
: "???",
cookie);
return LA_FLG_BINDTO | LA_FLG_BINDFROM;
}
unsigned int la_objclose(uintptr_t *cookie) {
printf("la_objclose(): %p\n", cookie);
return 0;
}
void la_preinit(uintptr_t *cookie) { printf("la_preinit(): %p\n", cookie); }
uintptr_t la_symbind32(Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook,
uintptr_t *defcook, unsigned int *flags,
const char *symname) {
printf("la_symbind64(): symname = %s; sym->st_value = %u\n", symname,
sym->st_value);
printf(" ndx = %u; flags = %#x", ndx, *flags);
printf("; refcook = %p; defcook = %p\n", refcook, defcook);
return sym->st_value;
}
uintptr_t la_symbind64(Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
uintptr_t *defcook, unsigned int *flags,
const char *symname) {
printf("la_symbind64(): symname = %s; sym->st_value = %p\n", symname,
(void *)sym->st_value);
printf(" ndx = %u; flags = %#x", ndx, *flags);
printf("; refcook = %p; defcook = %p\n", refcook, defcook);
return sym->st_value;
}
Elf64_Addr la_i86_gnu_pltenter(Elf64_Sym *sym, unsigned int ndx,
uintptr_t *refcook, uintptr_t *defcook,
La_x86_64_regs *regs, unsigned int *flags,
const char *symname, long *framesizep) {
printf("la_x86_64_gnu_pltenter(): %s (%p)\n", symname, (void *)sym->st_value);
return sym->st_value;
}