printf und LONG



  • Hallo.
    LONG ist unter Windows ja unsigned long, und mir gehts um das Feld e_lfanew in IMAGE_DOS_HEADER.
    Wenn ich schreibe printf("Test %l",DosHeader.e_lfanew);
    dann wird aber 0 ausgegeben, auch wenn im Hexeditor dasteht:

    00 01 00 00

    also im Dezimalsystem 256.
    Ich versteh das einfach nicht, Dass e_lfanew im Programm gleich 0 ist.
    Was mache ich da falsch?



  • l ist ein Modifizierer



  • AAAAH!
    Danke.
    Aber das hilft mir nicht viel.
    Denn wenn ich mit 0 vergleiche, sagt er, dass die Zahl 0 ist

    if(DosHeader.e_lfanew == 0)
    printf("Dreck! Des Teil is und bleibt 0!");



  • Zeig doch mal etwas mehr Code und am besten noch die einzulesende Datei.



  • Ok:

    ifstream IFile;
    IMAGE_DOS_HEADER DosHeader;
    
    IFile.seekg(0);
    
    // Erst Dos-Kopf lesen und auswerten
    IFile.read((char*)&DosHeader,sizeof(IMAGE_DOS_HEADER));
    
    printf("%i",DosHeader.e_sp);    //klappt
    printf("%i",DosHeader.e_flanew);//geht nicht, "" oder 0 wird angezeigt
    printf("%lld",DosHeader.e_flanew);//geht nicht, "" oder 0 wird angezeigt
    

    Ich habe mir mit einem anderen Programm auch die Infoen anzeigen lassen, die ich auslesen will. Alle Elemente des Dateikopfes werden auch richtig ausgelesen, nur das Letzte nicht, vllt. weil alle anderen IMAGE_DOS_HEADER-Elemente vom Typ WORD (= unsigned short) sind und nur das letzte LONG?



  • mach mal ein '#pragma pack(1)' oder '__attribute__((__packed__))' oder ähnliches rein, damit die struct members an bytegrenzen ausgerichtet werden...
    🙂



  • Hmm, hab ich auch schon überlegt, aber in meiner <winnt.h> steht ein
    #pragma pack(pop)
    #pragma pack(push,2)
    direkt über der Strukturdefinition von IMAGE_DOS_HEADER, deshalb ist es das glaube ich nicht.



  • Habs gerade mit ner anderen .exe versucht... geht.
    Also, danke für eure Hilfe!


Anmelden zum Antworten