DLL aus Funktionsnamen finden?



  • Hallo,

    ich habe eine Funktion aus D3D8 verwendet die ich über die passende LIB und über die .h includiert habe. Diese Funktion stammt aus dem leider etwas altem DirectX SDK d3d8dx.dll das nun nicht mehr existiert (Win7). Die exportierte Funktion ist irgendwo anders.
    Name der Funktion: D3DXCreateTextureFromResourceEx (DirectX8!, gibt es natürlich mit anderen Aufrufparametern in DX9 und Aufwärts)

    Das hat nun viel mit DX zu tun, warum ich das hier in Winapi poste ist folgende generelle Frage:
    Wie finde ich heraus welche DLL meine Funktion aufruft?

    Ich hab mal die Funktion in eine DLL gewrappt um nur diese einzeln zu betrachten. Mit dem Dependency Walker werden mir zwar viele Abhängigkeiten gezeigt, die Funktion ist aber so nicht dabei und lustigerweise nicht mal die D3D8.dll.
    Ich will später die Auflösung manuel laden um Cheat Tools auszuschliessen.

    Grüße,
    TheNoName


  • Mod

    Das steht in der Lib drin welche DLL dafür verwendet wird.
    Eskann auch sein, dass diese Funktion durch einen statischen Code in der Lib ersetzt wird und in andere Funktionen aufgelöst wird.

    Entsprechend wird normalerweise ein Import Eintrag in der EXE erzeugt, der die DLL später lädt. Wenn Du Delaoed Load verwendest wird ein Stub der Funktion erzeugt der dann den Load und GetProcAddr durchführt.

    Schau Dir die Lib an.



  • Ich wusste bis jetzt nicht das man die lib ansehen kann.
    Ich hab sie in einem Editor geöffnet und dort nach .dll gesucht.
    Es kommt dort die alte "d3d8d.dll" vor, die aber nicht mehr unter Win7 existiert und es kommt "D3D8.dll" welche diese Funktion aber nicht als Export zur Verfügung stellt. Die D3D8.dll ist zudem nur noch als Hardlink im system32 Verzeichnis und befindet sich dort:

    C:\Windows\winsxs\x86_microsoft-windows-directx-direct3d8_31bf3856ad364e35_6.1.7600.16385_none_c222c27ec21ab213

    Dort ist jedoch wie schon erwähnt nirgends die d3d8d.dll Datei.
    Nachdem eine alte D3D8 EXE Datei nichts vom Fehlen der D3D8D.dll wissen kann ist das alles sehr verwirrend. Zudem ist die Lib von Pre-Vista Zeit aus einem alten DirectX Packet. In der aktuellen DX9 ist D3D8 nicht mehr vorhanden. Funktioniert aber die Lib und die alte SDK 😉
    Auch vorhanden ist die "d3dxof.dll", dort passen die Angaben der Lib zu den depends Exports.


  • Mod

    Es gibt auch:
    Dumpbin
    Link /Dump

    Und was sagt bitte DEPENDS?



  • Depends sagt zu D3D8.dll das die obige gesuchte Funktion nicht dort vorhanden ist (bei D3DX9xx.xll ist sie vorhanden aber mit D3D9 Parametern). Die D3D8D.dll kann ich nicht öffnen, da nicht vorhanden. Die EXE hat Bindung zu D3D8.dll, sonst nichts Richtung 3D. Könnte mir aber vorstellen die Funktion irgendwo in DirectDraw wiederzufinden.
    Ich check mal die anderen dumps ...



  • Also ich kenne mich mit DUMP nicht gut aus, ich hab mal die DEPENDENCIES von der Test DLL mit dem obigen Befehl ausgegeben, D3D8 ist dort extra nicht dabei um es besser zu filtern:

    File Type: DLL

    Image has the following dependencies:

    KERNEL32.dll
    USER32.dll
    GDI32.dll
    ADVAPI32.dll

    Summary

    8000 .data
    1000 .data1
    D000 .rdata
    4000 .reloc
    1000 .rsrc
    3E000 .text[code]
    Was kann man da verfeinern?

    Edit: alle 4 DLL Exports überprüft, der Befehl ist nicht dabei.

    Imports:

    File Type: DLL

    Section contains the following imports:

    KERNEL32.dll
    1003F038 Import Address Table
    1004AAB0 Import Name Table
    0 time date stamp
    0 Index of first forwarder reference

    473 SetLastError
    202 GetLastError
    2EB InterlockedDecrement
    245 GetProcAddress
    2CF HeapFree
    4B2 Sleep
    119 ExitProcess
    46F SetHandleCount
    264 GetStdHandle
    2E3 InitializeCriticalSectionAndSpinCount
    1F3 GetFileType
    263 GetStartupInfoW
    D1 DeleteCriticalSection
    213 GetModuleFileNameA
    161 FreeEnvironmentStringsW
    511 WideCharToMultiByte
    1DA GetEnvironmentStringsW
    2CD HeapCreate
    2CE HeapDestroy
    3A7 QueryPerformanceCounter
    293 GetTickCount
    1C1 GetCurrentProcessId
    279 GetSystemTimeAsFileTime
    339 LeaveCriticalSection
    EE EnterCriticalSection
    172 GetCPInfo
    168 GetACP
    237 GetOEMCP
    30A IsValidCodePage
    2CB HeapAlloc
    218 GetModuleHandleW
    33F LoadLibraryW
    525 WriteFile
    214 GetModuleFileNameW
    418 RtlUnwind
    32D LCMapStringW
    367 MultiByteToWideChar
    269 GetStringTypeW
    2D4 HeapSize
    304 IsProcessorFeaturePresent
    8F CreateFileW
    2A3 GetVersionExA
    52 CloseHandle
    33C LoadLibraryA
    215 GetModuleHandleA
    354 LockResource
    341 LoadResource
    4B1 SizeofResource
    14B FindResourceA
    14E FindResourceW
    524 WriteConsoleW
    487 SetStdHandle
    2EF InterlockedIncrement
    4C6 TlsFree
    4C8 TlsSetValue
    4C7 TlsGetValue
    4C5 TlsAlloc
    EA EncodePointer
    300 IsDebuggerPresent
    4A5 SetUnhandledExceptionFilter
    4D3 UnhandledExceptionFilter
    4C0 TerminateProcess
    1C0 GetCurrentProcess
    186 GetCommandLineA
    CA DecodePointer
    2D2 HeapReAlloc
    1C5 GetCurrentThreadId
    3B1 RaiseException
    466 SetFilePointer
    19A GetConsoleCP
    1AC GetConsoleMode
    157 FlushFileBuffers

    USER32.dll
    1003F15C Import Address Table
    1004ABD4 Import Name Table
    0 time date stamp
    0 Index of first forwarder reference

    CD DrawTextA
    D0 DrawTextW

    GDI32.dll
    1003F010 Import Address Table
    1004AA88 Import Name Table
    0 time date stamp
    0 Index of first forwarder reference

    35 CreateDIBSection
    27F SetBkMode
    27E SetBkColor
    2A6 SetTextColor
    277 SelectObject
    E3 DeleteDC
    3D CreateFontIndirectA
    E6 DeleteObject
    30 CreateCompatibleDC

    ADVAPI32.dll
    1003F000 Import Address Table
    1004AA78 Import Name Table
    0 time date stamp
    0 Index of first forwarder reference

    26D RegQueryValueExA
    230 RegCloseKey
    25F RegOpenKeyA

    Summary

    8000 .data
    1000 .data1
    D000 .rdata
    4000 .reloc
    1000 .rsrc
    3E000 .text

    Hey, wenn die Funktion von oben nicht funktionieren (per dllexport ausprobiert) würde dann würde ich sagen sie ist nicht drinne. Statisches Binden ist aus.


  • Mod

    So ist es.



  • Man kann also nicht herausfinden in welcher Datei diese Funktion nun steckt?
    Soll ich mal das Beispielproject kompilierbar + libs hochladen?


Anmelden zum Antworten