X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Fpe.c;h=057345cd85b09836d18fe6d2286fa3848584b4b5;hb=6afcf1f9b14d9ad0111daea549cb0db5bf7f9009;hp=afcb4cef39f5ad0c62ca3d9933a329d26e96c80a;hpb=3d6a345b39afa454f0f33fc8d48b96229971e6ed;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/pe.c b/Usermode/Libraries/ld-acess.so_src/pe.c index afcb4cef..057345cd 100644 --- a/Usermode/Libraries/ld-acess.so_src/pe.c +++ b/Usermode/Libraries/ld-acess.so_src/pe.c @@ -19,12 +19,12 @@ #endif // === PROTOTYPES === - int PE_Relocate(void *Base, char **envp, char *Filename); +void *PE_Relocate(void *Base, char **envp, const char *Filename); char *PE_int_GetTrueFile(char *file); int PE_int_GetForwardSymbol(char *Fwd, void **Value); // === CODE === -int PE_Relocate(void *Base, char *envp[], char *Filename) +void *PE_Relocate(void *Base, char **envp, const char *Filename) { tPE_DOS_HEADER *dosHdr = Base; tPE_IMAGE_HEADERS *peHeaders; @@ -67,7 +67,8 @@ int PE_Relocate(void *Base, char *envp[], char *Filename) void *symPtr = 0; name = (void*)( iBase + importTab[j] ); DEBUGS(" PE_Relocate: Import Name '%s', Hint 0x%x\n", name->Name, name->Hint); - if( GetSymbolFromBase(pLibBase, name->Name, symPtr) == 0 ) { + if( GetSymbolFromBase(pLibBase, name->Name, symPtr, NULL) == 0 ) + { SysDebug("Unable to find symbol '%s' in library '%s'\n", name->Name, impDir[i].DLLName); return 0; } @@ -85,13 +86,13 @@ int PE_Relocate(void *Base, char *envp[], char *Filename) DEBUGS("PE_Relocate: RETURN 0x%x\n", iBase + peHeaders->OptHeader.EntryPoint); - return iBase + peHeaders->OptHeader.EntryPoint; + return (void*)( iBase + peHeaders->OptHeader.EntryPoint ); } /** - * \fn int PE_GetSymbol(Uint Base, char *Name, Uint *Ret) + * \fn int PE_GetSymbol(Uint Base, const char *Name, Uint *Ret) */ -int PE_GetSymbol(void *Base, char *Name, void **Ret) +int PE_GetSymbol(void *Base, const char *Name, void **Ret, size_t *Size) { tPE_DOS_HEADER *dosHdr = Base; tPE_IMAGE_HEADERS *peHeaders; @@ -129,6 +130,7 @@ int PE_GetSymbol(void *Base, char *Name, void **Ret) return PE_int_GetForwardSymbol(fwd, Ret); } *Ret = (void*)retVal; + if(Size) *Size = 0; return 1; } } @@ -174,9 +176,10 @@ int PE_int_GetForwardSymbol(char *Fwd, void **Value) DEBUGS(" PE_int_GetForwardSymbol: Get '%s' from '%s'\n", sym, libname); libbase = LoadLibrary(libname, DLL_BASE_PATH, NULL); - ret = GetSymbolFromBase(libbase, sym, Value); + ret = GetSymbolFromBase(libbase, sym, Value, NULL); if(!ret) { SysDebug(" PE_int_GetForwardSymbol: Unable to find '%s' in '%s'\n", sym, libname); + return 0; } Fwd[i] = '.'; return ret;