X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=inline;f=AcessNative%2Fld-acess_src%2Fbinary.c;h=d04ac6d2504026c0f93de0ae832cb2793e543f46;hb=36b950d17b828c7cd2e5e9dbe5fb4cbded89889c;hp=08ae6e9e0956598b960c11db7382c53759a12955;hpb=b4e2712f6a0849de53207ad50a38c9f468f22651;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/binary.c b/AcessNative/ld-acess_src/binary.c index 08ae6e9e..d04ac6d2 100644 --- a/AcessNative/ld-acess_src/binary.c +++ b/AcessNative/ld-acess_src/binary.c @@ -1,12 +1,17 @@ /* - * AcessNative + * AcessNative Dynamic Linker + * - By John Hodge (thePowersGang) + * + * binary.c + * - Provides binary loading and type abstraction */ +#define DEBUG 0 #include "common.h" #include #include #include -#define LIBRARY_PATH "$$$$../Usermode/Output/x86/Libs" +#define LIBRARY_PATH "$$$$../Usermode/Output/x86_64/Libs" // === TYPES === typedef struct sBinary { @@ -23,6 +28,7 @@ extern uintptr_t ElfRelocate(void *Base); extern int ElfGetSymbol(void *Base, char *Name, uintptr_t *ret, size_t *size); extern int ciNumBuiltinSymbols; extern tSym caBuiltinSymbols[]; +extern char **gEnvP; // === PROTOTYPES === void Binary_AddToList(const char *Filename, void *Base, tBinFmt *Format); @@ -108,7 +114,8 @@ void *Binary_LoadLibrary(const char *Name) } ret = Binary_Load(path, (uintptr_t*)&entry); - printf("LOADED '%s' to %p (Entry=%p)\n", path, ret, entry); + if( ret != (void*)-1 ) + Debug("LOADED '%s' to %p (Entry=%p)", path, ret, entry); free(path); #if DEBUG @@ -119,7 +126,7 @@ void *Binary_LoadLibrary(const char *Name) #if DEBUG printf("Calling '%s' entry point %p\n", Name, entry); #endif - entry(ret, 0, argv, NULL); + entry(ret, 0, argv, gEnvP); } return ret; @@ -169,12 +176,12 @@ void *Binary_Load(const char *Filename, uintptr_t *EntryPoint) } #if DEBUG - printf("fmt->Load(%i)...\n", fd); + printf("fmt->Load(0x%x)...\n", fd); #endif ret = fmt->Load(fd); acess_close(fd); #if DEBUG - printf("fmt->Load(%p): %p\n", fd, ret); + printf("fmt->Load(0x%x): %p\n", fd, ret); #endif if( !ret ) { return NULL; @@ -251,6 +258,8 @@ int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value, size_t *Size) } //printf("Binary_GetSymbol: RETURN 0, not found\n"); - + printf("--- ERROR: Unable to find symbol '%s'\n", SymbolName); + + exit( -1 ); return 0; }