GetProcessHeap



  • hi, kurze und schnelle frage:

    Ist das zurückgegebene handle von GetProcessHeap gleich der start address des heapsegments des aufrufenden prozesses? grund: ich möchte gerne bestimmte daten im heap segment finden und ihn dafür durchsuchen. gut wäre es, wenn man auch noch die aktuelle heap size bekommen könnte.

    falls es so nicht geht: wie komme ich an die start address des heap segments im prozesskontext?

    vielen dank für hilfe.



  • btw: müsste nicht eig das heap segment im prozesskontext ab BSS + sizeof(BSS) befinden? in meinem asm buch steht, dass die reihen folge eig. immer cs, ds, bss, heap und dann stack ist.
    die adresse des BSS müsste man ja ausm pe header auslesen können.
    so a la

    IMAGE_OPTIONAL_HEADER.BaseOfData + IMAGE_OPTIONAL_HEADER.SizeOfInitializedData + IMAGE_OPTIONAL_HEADER.SizeOfUninitializedData
    

    allerdings hatte ich schon den fall, dass SizeOfUninitializedData 0 war, obwohl es uninitialisierte daten gab. kann natürlich aber auch sein, dass der compiler per option generell alle daten ins ds ablegt... so genau weiß ich das nicht.

    hilfe wäre nett.



  • Die Reihenfolge ist denke ich so (bin mir aber auch nicht sicher) :
    NULL Page(0-128Mb),Codesegment,Datensegment,BSS,Heap,DSO,VDSO,DSO,Stack,Kernel man muss auch beachten das ASLR deaktiviert ist.

    Rein theorethisch(denk aber das ist zu 80% falsch 🙂 könntest du die Startadresse bekommen wenn du zum ersten Mal dynamisch Speicherplatz reservierst. Wenn ich diesen mit GetProcessHeap vergleiche ist aber dazwischen noch viel Raum.

    HANDLE h = GetProcessHeap();
    int *iPtr = (int*) malloc (sizeof(int));
    printf("Startadresse : %x \nGetProcessHeap : %x",iPtr,h);
    free(iPtr);
    

    Bei mir ist die Adresse von iPtr kleiner als von dem HANDLE h deshalb würde ich ausschließen das GetProcessHeap den Anfang des Heaps liefert. Das jedoch iPtr der Anfang ist weiß ich auch nicht. Ich kenn mich nicht so gut im virtuellen Adressraum aus


Anmelden zum Antworten