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
-
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.
-
Es gibt auch:
Dumpbin
Link /DumpUnd 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.dllSummary
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 reference473 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 FlushFileBuffersUSER32.dll
1003F15C Import Address Table
1004ABD4 Import Name Table
0 time date stamp
0 Index of first forwarder referenceCD DrawTextA
D0 DrawTextWGDI32.dll
1003F010 Import Address Table
1004AA88 Import Name Table
0 time date stamp
0 Index of first forwarder reference35 CreateDIBSection
27F SetBkMode
27E SetBkColor
2A6 SetTextColor
277 SelectObject
E3 DeleteDC
3D CreateFontIndirectA
E6 DeleteObject
30 CreateCompatibleDCADVAPI32.dll
1003F000 Import Address Table
1004AA78 Import Name Table
0 time date stamp
0 Index of first forwarder reference26D RegQueryValueExA
230 RegCloseKey
25F RegOpenKeyASummary
8000 .data
1000 .data1
D000 .rdata
4000 .reloc
1000 .rsrc
3E000 .textHey, 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.
-
So ist es.
-
Man kann also nicht herausfinden in welcher Datei diese Funktion nun steckt?
Soll ich mal das Beispielproject kompilierbar + libs hochladen?