Exports table einer dll
-
wie bekomm ich den?
ich wollte eon Prog schreibe das mir aus einer dll eine dazugehörige c++-header-datei generiert, da ich bei c++ dlls ja die paramer und rückgabewerte immer im funktionennamne enthaltien sind müsste das eig möglich sein, was mir nun noch fehlt ist eine funktion die mir die funktionen auflistet, die eine dll exportiert
voon hieraus wurde ich weitergeleiet
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1890972.html#1890972
-
Wie kommst Du darauf, dass die Funktionsparameter im Namen enthalten sind? Das gilt nur wenn nicht im "C" Stil exportiert wurde, also C++ name mangeling vorhanden ist ...
Ansonsten der Klassiker zu diesem Thema:
http://msdn.microsoft.com/en-us/magazine/cc301805.aspx
-
Ja aba in meinem fall wurden sie nicht im "c" stil exportiert
aba thx für den link auch wenn es ziemlcih viel text auf englisch ist.
-
FarnK schrieb:
Ja aba in meinem fall wurden sie nicht im "c" stil exportiert
aba thx für den link auch wenn es ziemlcih viel text auf englisch ist.Jo. Wenn man schon kaum aber in Deutsch schreiben kann, dann wird es schon schwieirg mit Englisch!

Ansonsten bzgl. name mangeling / name decoration:
http://support.microsoft.com/kb/126845/en-us
-
wenn es möglcih ware hätte ich gerne sowas hier
void CreateDllHeader(String filename) { String[] exoprtierteSymbole; exoprtierteSymbole = GetExportsFromModule(filename);//<-- und diese funktion fehlt mir String[] unDekorierteSymbole = new String[exoprtierteSymbole.Lenght]; for(int i = 0; i < exoprtierteSymbole.Lenght ; i++) { unDekorierteSymbole[i] = undecorateSymolName(exoprtierteSymbole[i]); } }Leider kenne ich kein funtion die sowas wie GetExportsFromModule macht, gibt es sowas ähnliches
-
edit: natürlich soll danch noch mehr code kommen, der dann die datei generiert und so
-
Soll ich Dich ins Projekte Forum verschieben? Wie viel willst Du denn dafür ausgeben?
-
nö, ich dacht eig. ich sei hier richtig, weil ich ja willen wollte ob es in der API soeine funktion gibt.
ich meine andere programme wie dumpbin.exe oder Dependency Walker können das ja auch da dachte ich das das doch eig. machbar sein sollte
-
so hab grade diesen code gefunden, der leist zawr eig. die importe aus, aber für die exoprte müsste es doch ganz ähnlcih gehen, oder?
bool GetList(std::string Path, std::vector<std::string> &Imports, int ListType) { tMapping Mapping; PIMAGE_DOS_HEADER pDosHeader; PIMAGE_NT_HEADERS pNtHeaders; DWORD ImportDataRva; PIMAGE_SECTION_HEADER pCurrentSection; unsigned int nSectionCounter; PIMAGE_IMPORT_DESCRIPTOR pImportDesc; DWORD dwSectionOffset; PIMAGE_THUNK_DATA32 pImageThunkData; PIMAGE_IMPORT_BY_NAME pImportByName; bool boFound = false; std::string DllName; std::string FunctionName; std::stringstream sstream; // Clear list Imports.clear(); // Open the file and get the mapping if (!GetFileMapping(Path, Mapping)) return false; // Get the DOS header pDosHeader = (PIMAGE_DOS_HEADER) Mapping.pBaseAddr; // Is it a DOS signature? if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) { CloseFileMapping(Mapping); return false; } // Ok, get the NT headers next pNtHeaders = (PIMAGE_NT_HEADERS)(Mapping.pBaseAddr + pDosHeader->e_lfanew); // Is it a NT signature? if (pNtHeaders->Signature != IMAGE_NT_SIGNATURE) { CloseFileMapping(Mapping); return false; } // Get the Relative Virtual Address of the Import Entry of the Image Directory ImportDataRva = pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; // Get the pointer to the first Image Section pCurrentSection = (PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION(pNtHeaders); //und hier geht eig. noch weiter
-
Schon mal mit IMAGE_DIRECTORY_ENTRY_EXPORT versucht?
-
Überflieger schrieb:
Schon mal mit IMAGE_DIRECTORY_ENTRY_EXPORT versucht?
bin ich grad dabei^^
-
habs geschafft mit
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1475436.html