DLL Export bestimmte Header ausschließen??
-
Hi,
ich bin noch relativ neu mit C++ und stehe im Moment vor folgendem Problem.
Ich lese Daten von einer seriellen Schnittstelle ( COM1), dazu nutze ich Funktionen aus der Windows.h. Mein ganzes Projekt wird als DLL gebaut und in einem anderen Projekt verwendet. Dieses Projekt verbietet die Windows.h.
Das andere Projekt ist nicht von mir, sonder handelt sich um eine Engine einer großen Spielefirma, also die Möglichkeit den Aufruf von Windows.h dort zu erlauben steht außer Frage.
Gibt es eine Möglichkeit mein eigenes Projekt so zu bauen, dass die Windows.h dabei nicht exportiert wird, ich aber trotzdem auf deren Funktionen zugreifen kann?Cheers Pascal
-
Seit wann findet man den Header in einem Kompilat wieder?
-
Auf WIN API Funktionen zugreifen ohne windows.h zu verwenden?
Ja das geht, zwar nicht mit C++ aber mit Assembler kannste ja inline Assembler in deinem Projekt verwenden.Schau mal hier:
http://projectshellcode.com/?q=node/12
Guck dir mal Tutorial 5, 6 und 7 an.Ich hab mal kurz mein WinDbg gestartet vielleicht kannste hiermit noch was anfangen:
lkd> !peb PEB at 7ffdf000 InheritedAddressSpace: No ReadImageFileExecOptions: No BeingDebugged: No ImageBaseAddress: 01000000 Ldr 00191e90 Ldr.Initialized: Yes Ldr.InInitializationOrderModuleList: 00191f28 . 00193168 Ldr.InLoadOrderModuleList: 00191ec0 . 00193158 Ldr.InMemoryOrderModuleList: 00191ec8 . 00193160 Base TimeStamp Module 1000000 49839558 Jan 31 01:03:36 2009 E:\Debugging Tools for Windows (x86)\windbg.exe 7c910000 4d00f27b Dec 09 16:15:07 2010 C:\WINDOWS\system32\ntdll.dll 7c800000 506bc5d8 Oct 03 06:58:00 2012 C:\WINDOWS\system32\kernel32.dll 77da0000 49900ac0 Feb 09 11:51:44 2009 C:\WINDOWS\system32\ADVAPI32.dll 77e50000 4c68fa55 Aug 16 10:44:05 2010 C:\WINDOWS\system32\RPCRT4.dll 77fc0000 4a433473 Jun 25 10:25:23 2009 C:\WINDOWS\system32\Secur32.dll 77ef0000 49006fe7 Oct 23 14:36:55 2008 C:\WINDOWS\system32\GDI32.dll 7e360000 4802bfb7 Apr 14 04:21:43 2008 C:\WINDOWS\system32\USER32.dll 77be0000 4802c034 Apr 14 04:23:48 2008 C:\WINDOWS\system32\msvcrt.dll 2000000 49839550 Jan 31 01:03:28 2009 E:\Debugging Tools for Windows (x86)\dbgeng.dll 3000000 49839544 Jan 31 01:03:16 2009 E:\Debugging Tools for Windows (x86)\dbghelp.dll 77bd0000 4802bfb8 Apr 14 04:21:44 2008 C:\WINDOWS\system32\VERSION.dll 774b0000 4eb01929 Nov 01 17:07:05 2011 C:\WINDOWS\system32\ole32.dll 7e670000 4fd20b4a Jun 08 16:25:14 2012 C:\WINDOWS\system32\SHELL32.dll 77f40000 4b1e1b10 Dec 08 10:23:28 2009 C:\WINDOWS\system32\SHLWAPI.dll 773a0000 4c729dc2 Aug 23 18:11:46 2010 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\COMCTL32.dll 71a80000 4802bfb1 Apr 14 04:21:37 2008 C:\WINDOWS\system32\MPR.dll 76330000 4802bf9c Apr 14 04:21:16 2008 C:\WINDOWS\system32\IMM32.DLL 5b0f0000 4802bfba Apr 14 04:21:46 2008 C:\WINDOWS\system32\uxtheme.dll 746a0000 4802bfd8 Apr 14 04:22:16 2008 C:\WINDOWS\system32\MSCTF.dll 4b4d0000 4802bff4 Apr 14 04:22:44 2008 C:\WINDOWS\system32\MSFTEDIT.DLL 75250000 4802bfd9 Apr 14 04:22:17 2008 C:\WINDOWS\system32\msctfime.ime 1d00000 49839557 Jan 31 01:03:35 2009 E:\Debugging Tools for Windows (x86)\symsrv.dll 1500000 49839542 Jan 31 01:03:14 2009 E:\Debugging Tools for Windows (x86)\winext\ext.dll 1900000 4983953d Jan 31 01:03:09 2009 E:\Debugging Tools for Windows (x86)\WINXP\exts.dll c70000 4983953d Jan 31 01:03:09 2009 E:\Debugging Tools for Windows (x86)\winext\kext.dll 10000000 49839522 Jan 31 01:02:42 2009 E:\Debugging Tools for Windows (x86)\WINXP\kdexts.dll 1970000 4802454c Apr 13 19:39:24 2008 C:\WINDOWS\system32\xpsp2res.dll SubSystemData: 00000000 ProcessHeap: 00090000 ProcessParameters: 00020000
lkd> dt _peb nt!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x002 BeingDebugged : UChar +0x003 SpareBool : UChar +0x004 Mutant : Ptr32 Void +0x008 ImageBaseAddress : Ptr32 Void +0x00c Ldr : Ptr32 _PEB_LDR_DATA +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS +0x014 SubSystemData : Ptr32 Void +0x018 ProcessHeap : Ptr32 Void +0x01c FastPebLock : Ptr32 _RTL_CRITICAL_SECTION +0x020 FastPebLockRoutine : Ptr32 Void +0x024 FastPebUnlockRoutine : Ptr32 Void +0x028 EnvironmentUpdateCount : Uint4B +0x02c KernelCallbackTable : Ptr32 Void +0x030 SystemReserved : [1] Uint4B +0x034 AtlThunkSListPtr32 : Uint4B +0x038 FreeList : Ptr32 _PEB_FREE_BLOCK +0x03c TlsExpansionCounter : Uint4B +0x040 TlsBitmap : Ptr32 Void +0x044 TlsBitmapBits : [2] Uint4B +0x04c ReadOnlySharedMemoryBase : Ptr32 Void +0x050 ReadOnlySharedMemoryHeap : Ptr32 Void +0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void +0x058 AnsiCodePageData : Ptr32 Void +0x05c OemCodePageData : Ptr32 Void +0x060 UnicodeCaseTableData : Ptr32 Void +0x064 NumberOfProcessors : Uint4B +0x068 NtGlobalFlag : Uint4B +0x070 CriticalSectionTimeout : _LARGE_INTEGER +0x078 HeapSegmentReserve : Uint4B +0x07c HeapSegmentCommit : Uint4B +0x080 HeapDeCommitTotalFreeThreshold : Uint4B +0x084 HeapDeCommitFreeBlockThreshold : Uint4B +0x088 NumberOfHeaps : Uint4B +0x08c MaximumNumberOfHeaps : Uint4B +0x090 ProcessHeaps : Ptr32 Ptr32 Void +0x094 GdiSharedHandleTable : Ptr32 Void +0x098 ProcessStarterHelper : Ptr32 Void +0x09c GdiDCAttributeList : Uint4B +0x0a0 LoaderLock : Ptr32 Void +0x0a4 OSMajorVersion : Uint4B +0x0a8 OSMinorVersion : Uint4B +0x0ac OSBuildNumber : Uint2B +0x0ae OSCSDVersion : Uint2B +0x0b0 OSPlatformId : Uint4B +0x0b4 ImageSubsystem : Uint4B +0x0b8 ImageSubsystemMajorVersion : Uint4B +0x0bc ImageSubsystemMinorVersion : Uint4B +0x0c0 ImageProcessAffinityMask : Uint4B +0x0c4 GdiHandleBuffer : [34] Uint4B +0x14c PostProcessInitRoutine : Ptr32 void +0x150 TlsExpansionBitmap : Ptr32 Void +0x154 TlsExpansionBitmapBits : [32] Uint4B +0x1d4 SessionId : Uint4B +0x1d8 AppCompatFlags : _ULARGE_INTEGER +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER +0x1e8 pShimData : Ptr32 Void +0x1ec AppCompatInfo : Ptr32 Void +0x1f0 CSDVersion : _UNICODE_STRING +0x1f8 ActivationContextData : Ptr32 Void +0x1fc ProcessAssemblyStorageMap : Ptr32 Void +0x200 SystemDefaultActivationContextData : Ptr32 Void +0x204 SystemAssemblyStorageMap : Ptr32 Void +0x208 MinimumStackCommit : Uint4B
lkd> dt _PEB_LDR_DATA nt!_PEB_LDR_DATA +0x000 Length : Uint4B +0x004 Initialized : UChar +0x008 SsHandle : Ptr32 Void +0x00c InLoadOrderModuleList : _LIST_ENTRY +0x014 InMemoryOrderModuleList : _LIST_ENTRY +0x01c InInitializationOrderModuleList : _LIST_ENTRY +0x024 EntryInProgress : Ptr32 Void
lkd> dt _LIST_ENTRY nt!_LIST_ENTRY +0x000 Flink : Ptr32 _LIST_ENTRY +0x004 Blink : Ptr32 _LIST_ENTRY
-
Kannst Du noch mals die Frage so formulieren, dass man sie versteht????
Du kannst keine (Sinnvolle) DLL für Windows schreiben, wenn Du kein Windows verwendent willst....
-
meiwen1248 schrieb:
Das andere Projekt ist nicht von mir, sonder handelt sich um eine Engine einer großen Spielefirma, also die Möglichkeit den Aufruf von Windows.h dort zu erlauben steht außer Frage.
Gibt es eine Möglichkeit mein eigenes Projekt so zu bauen, dass die Windows.h dabei nicht exportiert wird, ich aber trotzdem auf deren Funktionen zugreifen kann?Also ich verstehe es so:
- Er hat irgendein Projekt, in diesem Projekt darf er nicht die windows.h includen
(Darfst du den eventuell nur #include <windows> schreiben ^^)
Mit dem Zeug das ich gepostet habe holt er sich am besten zu erst die Base Adresse der Kernel32.dll durch die DLL kann man dann durchgehen und schauen welche Adresse z.b. die Funktionen LoadLibrary und GetProcAddress haben.
Wenn er die Adresse von LoadLibrary und GetProcAddress hat dann kann er ja einfach jede DLL laden und die Adressen der Funktionen ermitteln sowie diese aufrufen.
Oder verstehe meiwen1248 komplett falsch? o_O
-
Bassmaster schrieb:
Oder verstehe meiwen1248 komplett falsch? o_O
Du verstehst ihn nicht Falsch, sondern du willst das Thema einfach in diese Richtung ziehen.
-
Abgesehen davon braucht man dafür kein Assembler, einfach die Deklaration hinschreiben und die richtige .lib linken und gut ist...