Addresse der IMAGE_DATA_DIRECTORY



  • hallo,
    ich versuche gerade die Adresse der IMAGE_DATA_DIRECTORY aus einem laufenden process zu bekommen um den Bereich der IMAGE_DATA_DIRECTORY in einer Variable zu speichern.

    aber ich komm im moment nicht weiter.

    //Wertzuweisungen diehnen dem überblick woher diese kommen
    LPVOID m_lpvImageBase = PEB->ImageBaseAddress;//PEB & ImageBaseAddress stimmt
    PIMAGE_OPTIONAL_HEADER m_pImage_Optional_Header = IMAGE_NT_HEADERS->OptionalHeader;//DOS & NT Header Adressen stimmen
    
    DWORD dwBytes;
    m_pImage_Data_Directory = new IMAGE_DATA_DIRECTORY;
    
    ReadProcessMemory( m_hProcess, 
    		(LPVOID)((DWORD)m_lpvImageBase + m_pImage_Optional_Header->SizeOfImage), 
    		m_pImage_Data_Directory, 
    		sizeof(IMAGE_DATA_DIRECTORY), 
    		&dwBytes);
    

    welche adresse muss ich von der IMAGE_OPTIONAL_HEADER zu der BasisAdresse dazu zählen das mir readprocess die Variable der IMAGE_DATA_DIRECTORY richtig mit den 16 werten befüllt?



  • Schau dir mal den Code an:

    PIMAGE_DATA_DIRECTORY pDataDirectory;
    PIMAGE_DOS_HEADER pDOSHeader;
    PIMAGE_OPTIONAL_HEADER pOptionalHeader;
    PIMAGE_NT_HEADERS pPEHeader;
    
    pDOSHeader = (PIMAGE_DOS_HEADER)Module; 
    pPEHeader = (PIMAGE_NT_HEADERS)(( DWORD)hTargetModule + (pDOSHeader->e_lfanew ) );
    pOptionalHeader = & pPEHeader->OptionalHeader;
    pDataDirectory = pOptionalHeader->DataDirectory;
    


  • das problem bei mir ist, wenn ich es so mache wie du

    m_pImage_Data_Directory = m_pImage_Optional_Header->DataDirectory;
    

    (klappt problemlos wenn ich eine dll als datei auslese)

    beim process auslesen ist m_pImage_Optional_Header->DataDirectory ein bereich der gefüllt ist mit werten, hingegen ist m_pImage_Data_Directory kein bereich und VirtuellAddress ist 0 und Size ist auch 0.

    das ist mein problem was mich stutzig macht 😕



  • Das ist aber kein Fehler. Der "m_pImage_Optional_Header->DataDirectory" zeigt auf ein Array mit 16 Elementen. Bei einer EXE ist im ersten Element (IMAGE_DIRECTORY_ENTRY_EXPORT) in den allermeisten Fällen sowieso alles null, da sie nichts zu exportieren hat.



  • wir reden glaube ich im moment aneinander vorbei 🙄

    meine exe die ich über vc starte bricht mit einer unbehandelten ausnahme im reales modus ab. dann kommt doch eine Messagebox, wo man wählen kann...
    Unterbrechen, Wiederholen, Abbrechen. wenn ich den button mit unterbrechen anklicke, komm ich doch zurück zu meinem programmcode, wo die unbehandelte ausnahme auftritt. auserdem werden mir doch noch die werte in den Variablen angezeigt, die das prog zum zeitpunkt der unbehandelten ausnahme hatte.

    in dieser zeile(wo ich den bereich übergebe)

    m_pImage_Data_Directory = m_pImage_Optional_Header->DataDirectory;
    

    ist m_pImage_Optional_Header->DataDirectory eben ein bereich der 15 elemente beinhaltet. zur gleichen zeit, ist aber m_pImage_Data_Directory kein bereich sondern eine einfache strucktur mit den variablen VirtuellAddress und Size.


Anmelden zum Antworten