PAGE_GUARD protection von processen ausschalten, geht sowas ???



  • VirtualProtectEx ()



  • Warum solltman das auschalten wollen? Und wie soll das Speichermanagment ohne PAGE_GUARD funktionieren? Mit dem Flag wird die Speicherseite markiert die direkt auf die für den Stack reservierten Seiten folgt. Erfolgt ein Zugriff auf die Seite weiß Windows dass diese Seite noch nicht reserviert ist und reserviert sie für den Stack. Deaktiviert man diesen Flag...ja, keine Ahnung was dann Windows macht. Davon abgesehen halte ich es für sehr unwahrscheinlich, dass man dies deaktivieren kann. Denn ohne diesen Mechanismus dürfte das gesamte Stack-Speichermanagment von Windows nicht funktionieren.



  • Luckie schrieb:

    Warum sollt man das auschalten wollen?

    Um Debugger-Fallen zu umgehen. PAGE_GUARD ist nicht "beschränkt" auf den Stackbereich.



  • hm, eigentlich geht es nur darum, das ich eine anwendung mit einen Memory-Editor öffnen will, aber mir wird der laufende process nicht angezeigt. in einem forum habe ich herrausgefunden das solche memory-editoren, processe die mit PAGE_GUARD laufen einfach ignorieren. also will ich das PAGE_GUARD ausschalten.

    Gruß Tobi.



  • jaja, die gute alte hau-drauf Methode...



  • wieso hau-drauf ? gehts auch anders? das ich an den speicher rankomme?



  • Keine Ahnung, was genau willst du denn machen? Infos über (fremden) Speicher holen, draus lesen oder sogar reinschreiben?



  • vieleicht 🙂

    mal ne frage zu VirtualProtectEx():

    BOOL VirtualProtectEx(
    
        HANDLE hProcess,	// handle of process 
        LPVOID lpAddress,	// address of region of committed pages 
        DWORD dwSize,	// size of region 
        DWORD flNewProtect,	// desired access protection 
        PDWORD lpflOldProtect 	// address of variable to get old protection  
       );
    

    wenn ich mir das handle vom process geholt habe und nun den speicher zugägnlich machen möchte... muss ich dann unbedingt einen pointer im zweiten parameter und die grösse im dritten angeben? oder kann ich das auf null setzen und er setzt alle seiten im speicher auf full access ?

    Gruß Tobi.



  • T0bi schrieb:

    processe die mit PAGE_GUARD laufen

    Ähm, alle Prozesse werden wohl diesen PAGE_GUARD Flag haben, das gehört ur Windows speicherverwaltung und hat nichts mit Prozessen zu tun.



  • ok ... waer trotzdem noch cool, wenn mir wer meine frage beantworten koennte ...

    Gruß Tobi.



  • Was sagt die Hilfe dazu?



  • VirtualAllocEx -> SYSTEM_INFO.



  • Na T0bi, trollst wieder rum 😉

    greetz, Swordfish



  • T0bi schrieb:

    wenn ich mir das handle vom process geholt habe und nun den speicher zugägnlich machen möchte...
    muss ich dann unbedingt einen pointer im zweiten parameter und die grösse im dritten angeben?

    Ja, musst Du. VirtualQueryEx () liefert Dir sogar den "Pointer" und die "Grösse".

    T0bi schrieb:

    oder kann ich das auf null setzen und er setzt alle seiten im speicher auf full access ?

    Nein, macht er nicht. Das Flag "PAGE_GUARD" hat nichts zutun mit "Speichermanagement".



  • hmmm...

    DWORD VirtualQueryEx(
    
        HANDLE hProcess,	                  // handle of process 
        LPCVOID lpAddress,	                  // address of region 
        PMEMORY_BASIC_INFORMATION lpBuffer,	// address of information buffer  
        DWORD dwLength 	                  // size of buffer 
    );
    

    SYSTEM_INFO si;
    schreibe ich im zweiten parameter einfach nur GetSystemInfo( &si ), rein?

    MEMORY_BASIC_INFORMATION mbi;
    und im dritten &mbi ?

    und im vierten sizeof( MEMORY_BASIC_INFORMATION ) ?

    und trotzdem weiss ich immer noch net wie ich das mit VirtualallocEx in verbindung bringe... gibts denn hier irgendwo codeschnipdel?

    Gruß Tobi.



  • ich glaub langsam komm ich dahinter wie das mit dem ganzen funktioniert. eine frage wollte ich da noch schnell einwerfen.
    es ist mir bekannt das unter 32bit systemen( zB. WinXP ) jedem process 4GB virtueler speicher zugewiesen wird. meine frage war ja im weitesten sinn die, wie ich start- und endaddresse eines processes heraus bekomme.
    wenn ich in VirtualQueryEx() das process handle uebergebe, ist dann wenn ich fuer die startaddresse 0x00000000 eingebe, das die erste addresse im virtuelen speicher des processes oder überhaupt von allen processen die erste addresse?
    denn wenn es so waere koennte ich nicht einfach eine schleife schreiben, die alle seiten in diesem 4GB speicher durch ackert( end addresse also 0xFFFFFFFF )
    und so mit virtualprotectex alle seiten auf full_access setzen?



  • ich meinte bis 0x80000000.


Anmelden zum Antworten