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...


Anmelden zum Antworten