X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=AcessNative%2Fld-acess_src%2Fbinary.c;h=623543188936465e70e93b99127506c06670a829;hb=6d6b367c4f5e413a9e4135d9f5c40077c3724525;hp=746fbb8b007af162e02b42ce6018cc70c9f7afe0;hpb=b8b25ae01e13c655608fb6705574e5218b1a519f;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/binary.c b/AcessNative/ld-acess_src/binary.c index 746fbb8b..62354318 100644 --- a/AcessNative/ld-acess_src/binary.c +++ b/AcessNative/ld-acess_src/binary.c @@ -1,12 +1,13 @@ /* * AcessNative */ +#define DEBUG 1 #include "common.h" #include #include #include -#define LIBRARY_PATH "$$$$../Usermode/Output/i386/Libs" +#define LIBRARY_PATH "$$$$../Usermode/Output/x86_64/Libs" // === TYPES === typedef struct sBinary { @@ -20,7 +21,7 @@ typedef struct sBinary { // === IMPORTS === extern void *Elf_Load(int fd); extern uintptr_t ElfRelocate(void *Base); -extern int ElfGetSymbol(void *Base, char *Name, uintptr_t *ret); +extern int ElfGetSymbol(void *Base, char *Name, uintptr_t *ret, size_t *size); extern int ciNumBuiltinSymbols; extern tSym caBuiltinSymbols[]; @@ -156,7 +157,7 @@ void *Binary_Load(const char *Filename, uintptr_t *EntryPoint) return NULL; } - acess_read(fd, 4, &dword); + acess_read(fd, &dword, 4); acess_seek(fd, 0, ACESS_SEEK_SET); if( memcmp(&dword, "\x7F""ELF", 4) == 0 ) { @@ -169,12 +170,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; @@ -221,7 +222,7 @@ void Binary_SetReadyToUse(void *Base) } } -int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value) +int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value, size_t *Size) { int i; tBinary *bin; @@ -236,6 +237,7 @@ int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value) { if( strcmp(caBuiltinSymbols[i].Name, SymbolName) == 0 ) { *Value = (uintptr_t)caBuiltinSymbols[i].Value; + if(Size) *Size = 0; return 1; } } @@ -245,11 +247,13 @@ int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value) { if( !bin->Ready ) continue; //printf(" Binary_GetSymbol: bin = %p{%p, %s}\n", bin, bin->Base, bin->Path); - if( bin->Format->GetSymbol(bin->Base, (char*)SymbolName, Value) ) + if( bin->Format->GetSymbol(bin->Base, (char*)SymbolName, Value, Size) ) return 1; } //printf("Binary_GetSymbol: RETURN 0, not found\n"); - + printf("--- ERROR: Unable to find symbol '%s'\n", SymbolName); + + exit( -1 ); return 0; }