Mercurial > pub > dyncall > dyncall
changeset 230:6c7591cef6a8
- dynload_syms_pe.c cleanup
author | Tassilo Philipp |
---|---|
date | Sun, 16 Apr 2017 16:17:47 +0200 |
parents | 0ce6beba55df |
children | 1d774010ddb9 |
files | dynload/dynload_syms_pe.c |
diffstat | 1 files changed, 24 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/dynload/dynload_syms_pe.c Sun Apr 16 14:55:17 2017 +0200 +++ b/dynload/dynload_syms_pe.c Sun Apr 16 16:17:47 2017 +0200 @@ -3,10 +3,10 @@ Package: dyncall Library: dynload File: dynload/dynload_syms_pe.c - Description: + Description: License: - Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, + Copyright (c) 2007-2017 Daniel Adler <dadler@uni-goettingen.de>, Tassilo Philipp <tphilipp@potion-studios.com> Olivier Chafik <olivier.chafik@gmail.com> @@ -31,12 +31,6 @@ #include <windows.h> -struct DLLib_ -{ - IMAGE_DOS_HEADER dos_header; -}; - - struct DLSyms_ { DLLib* pLib; @@ -50,14 +44,25 @@ DLSyms* dlSymsInit(const char* libPath) { - DLLib* pLib = dlLoadLibrary(libPath); - DLSyms* pSyms = (DLSyms*)dlAllocMem(sizeof(DLSyms)); - const char* base = (const char*) pLib; - IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*) base; - IMAGE_NT_HEADERS* pNTHeader = (IMAGE_NT_HEADERS*) ( base + pDOSHeader->e_lfanew ); - IMAGE_DATA_DIRECTORY* pExportsDataDir = &pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; - IMAGE_EXPORT_DIRECTORY* pExports = (IMAGE_EXPORT_DIRECTORY*) (base + pExportsDataDir->VirtualAddress); + DLLib* pLib; + DLSyms* pSyms; + IMAGE_DOS_HEADER* pDOSHeader; + IMAGE_NT_HEADERS* pNTHeader; + IMAGE_DATA_DIRECTORY* pExportsDataDir; + IMAGE_EXPORT_DIRECTORY* pExports; + const char* base; + pLib = dlLoadLibrary(libPath); + if(!pLib) + return NULL; + + base = (const char*)pLib; + pDOSHeader = (IMAGE_DOS_HEADER*)base; + pNTHeader = (IMAGE_NT_HEADERS*)(base + pDOSHeader->e_lfanew); + pExportsDataDir = &pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; + pExports = (IMAGE_EXPORT_DIRECTORY*)(base + pExportsDataDir->VirtualAddress); + + pSyms = (DLSyms*)dlAllocMem(sizeof(DLSyms)); pSyms->pBase = base; pSyms->pNames = (DWORD*)(base + pExports->AddressOfNames); pSyms->pFuncs = (DWORD*)(base + pExports->AddressOfFunctions); @@ -86,25 +91,20 @@ const char* dlSymsName(DLSyms* pSyms, int index) { - return (const char*)((const char*)pSyms->pBase + pSyms->pNames[index]); + return pSyms->pBase + pSyms->pNames[index]; } -void* dlSymsValue(DLSyms* pSyms, int index) -{ - return (void*)(pSyms->pBase + pSyms->pFuncs[pSyms->pOrds[index]]); -} - - -const char* dlSymsNameFromValue(DLSyms* pSyms, void* value) +const char* dlSymsNameFromValue(DLSyms* pSyms, void* value) { int i, c=dlSymsCount(pSyms); for(i=0; i<c; ++i) { - if(dlSymsValue(pSyms, i) == value) + if((void*)(pSyms->pBase + pSyms->pFuncs[pSyms->pOrds[i]]) == value) return dlSymsName(pSyms, i); } /* Not found. */ return NULL; } +