KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Volatile Memory in User Mode?!
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Tongue
Ich habe mich heute etwas mit der Power Library auseinander gesetzt.
Dabei bin ich über die Funktion "scePowerVolatileMemTryLock" gestolpert.
Diese befindet sich laut PRX-Tool in der User Mode Export Library ( scePower, 0x40010011 ). Heißt das jetzt, dass der Speicherbereich im User Mode zugänglich ist?! Denn der Volatile Speicher ist doch Kernel Mode xD

PS: Hier sind noch ein paar Informationen über die Library.
Einfach mal die Suchfunktion benutzen-.-

http://www.pspking.de/forum/showthread.php?tid=26127
Der Volatile Memory Block wird von der Firmware benutzt, um Daten zu speichern wenn man die PSP in den Standby Modus setzt. Wenn du diesen Block also benutzt, kann man die PSP nicht im Standby Modus setzten. Ich weiß insgesamt nicht warum du diesen 4Mb Block benutzten solltest, der normale User Mode RAM ist normalerweiße groß genug.

Zitat von Hackman
Bitte @die, die nichts davon verstehen... spammt den Thread nicht voll.
@Choasduckman: Ich werd mir das später nachmittags mal anschauen, das interessiert mich jetzt auch.
Bitte Hackman
@HacKmaN: Danke =) Du bist der einzige hier, der die Beiträge noch durchliest^^

TyRaNiD hat hier auch etwas dazu gepostet. Dann habe ich auch noch das gefunden...

Edit: Und HacKmaN? Exploitable? Gibt zwar wieder den << 11 aber den hat T_N ja auch umgangen xD

Chaosduckman :
@HacKmaN: Danke =) Du bist der einzige hier, der die Beiträge noch durchliest^^

TyRaNiD hat hier auch etwas dazu gepostet. Dann habe ich auch noch das gefunden...

Edit: Und HacKmaN? Exploitable? Gibt zwar wieder den << 11 aber den hat T_N ja auch umgangen xD


Gleich, ich bin grad am reversen der Funktion Smile
Hab gestern noch was anderes machen müssen, deshalb mach ichs jetzt.

Ah bin schon ganz gespannt^^ Ich sollte selber mal Assembler lernen Big Grin
Ich hab die funktion mal reversed (nur pseudo C Code)

Code:
int scePower_FA97A599(int arg0, int *arg1, int *arg2)
{
    if(arg0 != 0)
        return 0x80000107;
    
    int k1 = pspSdkGetK1();
    pspSdkSetK1(k1 &lt;&lt; 11);
    
    if(((0x80000000 &amp; arg1) &gt;= 0) &amp;&amp; ((0x80000000 &amp; arg2) &gt;= 0))
    {
        int *array = (int *)600;
        
        int ret = sceKernelPollSema(array[1], 1);
        if(ret == 0)
        {
            if(arg1 != 0)
                *arg1 = array[7];
            
            if(arg2 != 0)
                *arg2 = array[8];
            
            int state = sceKernelCpuSuspendIntr();
            
            int field1 = ext(array[7], 23, 6);
            int field2 = ext(array[7], 29, 3);
            
            if(field1 != 16)
            {
                array[9] = 1;
                
                sceKernelCpuResumeIntrWithSync(state);
                pspSdkSetK1(k1);
                
                return ret;
            };
            
            if(((53 &gt;&gt; field2) &amp; 0x1) == 0)
            {
                array[9] = 1;
                
                sceKernelCpuResumeIntrWithSync(state);
                pspSdkSetK1(k1);
                
                return ret;
            };
            
            SysMemForKernel_31DFE03F(array[7], array[8], 15);
            
            array[9] = 1;
            
            sceKernelCpuResumeIntrWithSync(state);
            pspSdkSetK1(k1);
            
            return ret;
        };
        
        pspSdkSetK1(k1);
        return ((ret ^ 0x800201AD) == 0 ? 0x802B0200 : ret);
    };
    
    pspSdkSetK1(k1);
    return 0x80000023;
};


Allerdings sehe ich da nichts allzu interessantes. Du kannst es dir ja nochmal genauer anschauen.


//EDIT: Ist aus der power_01g.prx von der 6.20.

Danke sehr nett von dir Big Grin

Edit: Ne, also ich kann auch nichts finden^^
Aber was meinst du mit dem ext()? xD

Code:
int field1 = ext(array[7], 23, 6);

Chaosduckman :
Danke sehr nett von dir Big Grin

Edit: Ne, also ich kann auch nichts finden^^
Aber was meinst du mit dem ext()? xD

Code:
int field1 = ext(array[7], 23, 6);


Ext == Extract bit field
http://www.johnloomis.org/microchip/pic32/bitfields/bitfield.html

Die ext Funktion gibts in C nicht, ich habs nur so geschrieben, weil es in MIPS so implementiert ist.
Du kannst es ja noch in "richtiges" C umschreiben Wink

Ah xD ich kenne das als gepackte Strukturen =)
Ne in echtes C schreibe ich das nicht um. Habe ja auch noch andere Projekte ;-)
Referenz-URLs