KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Heyho,

wollte mal fragen, ob wer hier Ahnung hat, wie man eine Adresse x im Speicher der PSP findet, die einen Wert nach Adresse y schreibt. Am PC wüsste ich, wie ich vorzugehen habe, doch im Moment bin ich da ziemlich ratlos, wo ich bei der PSP anfangen soll...

Ich hoffe ihr versteht was ich meine und könnt mir helfen Wink

Lg~
Hi,

also eine Speicheradresse kann ja keine Daten in eine andere Speicheradresse schreiben...das kann nur ein Befehl/Kommando...

Suchst du also die Adresse eines Befehls in einem Disassambly der einen Wert in eine bestimmte Speicheradresse schreibt ? Bin mir nicht ganz sicher was genau du tatsächlich suchst...

anmabagima :
Suchst du also die Adresse eines Befehls in einem Disassambly der einen Wert in eine bestimmte Speicheradresse schreibt ? Bin mir nicht ganz sicher was genau du tatsächlich suchst...


Genau das ^^
Sorry für die etwas merkwürdige Ausdrucksweise Big Grin

Hi,

nun...das ist nicht ganz so leicht...da die Adressierung in der PSP nie direkt gemacht wird...du kannst also im Disassembly nicht nach der kompletten adresse suchen die dich interessiert...

in der regel wird das gemacht:
über den befehl lui $a0, 0x80 zum beispiel wird das obere word der adresse befüllt. die adresse wäre dann 0x800000. Der rest der adresse wird dann entweder mit dem befehl ori $a0, $a0, 0x1234 oder mit dem befehl addiu $a0, $a0, 0x1234 gemacht...
danach ist die adresse dann 0x801234...
das wäre dann aber auch schon der einfachste fall...wenn die gesuchte adresse zum beispiel durch eine struktur definition nicht direkt sondern über eine basis adresse angesprochen wird ist das noch etwas "komplizierter"...dann würde die oben genannte methode z.Bsp. die adresse 0x801200 in das register $a0 schreiben und eine Wertzuweisung auf die obige Adresse dann mittels
sw $v1, 34($a0) gemacht...also die adresse in $a0 + 34....

ich hoffe es ist einigermaßen verständlich erklärt und auch ohne Fehler Wink Anmerkungen und Verbesserungen willkommen ...

VG
Also müsste ich bei Adresse 0x123456 konkret nach 0x12 sowie 0x3456 suchen im Disassembly (im einfachsten Fall, den ich jetzt einfach mal erhoffe Tongue)?

Okay. Jetzt ist die Frage, woher ich eine "durchsuchbare" Disassembly bekomme; habe meinem Memdump in PS2DIS geöffnet und analysieren lassen; eine "Suche Kommando" Funktion habe ich da aber nicht erspäht :>

Kannst du mir da was ans Herz legen?

Lg und danke für deine hilfreichen Antworten =)
Hi,

kommt jetzt drauf an was du durchsuchen willst...wenn es um ein spiel oder homebrew geht dann kannst du die eboot mittels prxtool in entsprechenden code wandeln den du dann durchsuchen kannst...bei spielen musst du die eboot erstnoch decrypten...da gibt's entsprechende tools im iNet...

viel erfolg...
Also, ich habe mich ein wenig weiterinformiert, und es scheint an dem lwc1 hier gehangen zu haben: http://i.imgur.com/AHIZD.jpg
Jetzt habe ich mal versucht, eine MIPS Template darauf anzuwenden, die für meine Zwecke genügen sollte: http://i.imgur.com/rKjZd.png
Doch irgendwie scheint mein Plan nicht aufzugehen, denn jetzt tut sich garnix mehr, auch wenn ich den Code dann umgewandelt im Spiel aktiviere xD (Vorher [ohne Subroutine] wurde der Wert immer auf Standard zurückgesetzt und nicht wie beabsichtigt der Wert x immer hinzugefügt).
Hmmm...was genau hast du eigentlich vor, wenn ich das Fragen darf ?
Da ich kein MIPS experte bin, glaub ich nicht dass ich dir da so viel weiter helfen kann...

Ich hab zwar auch schon ein paar hooks für plugins programmiert aber weher wenig direkt in MIPS...
Der Wert aus Adresse 1 soll in einem Register gespeichert werden und ihm soll nach Betätigung einer bestimmten Taste ein bestimmter Wert hinzugefügt/abgezogen werden. Anschließend soll der veränderte Wert zurück nach Adresse 1 geschrieben werden. (Sind float Werte btw)
Leider habe ich keine Zeit den Code komplett zu analysierten, er sieht soweit aber ok aus.

1.) Überprüfe, ob dein Hook funktioniert. Ich persönlich bevorzuge JAL als meinen MIPS ASM hook Befehl.

2.) Hast du die "negative rule" bei der Controller Adresse beachtet?

3.) Stimmen die Button Werte (0x100, 0x200) mit denen des Spieles überein?

4.) Bist du dir sicher, dass deine Adresse 0x09B486E0 statisch ist?

5) Hast du auch bei der obigen Adresse die "negative rule" beachtet?

Zum Schluss nochmal etwas zu deinem Hook. Er ist ungünstig gewählt, da du über jr $ra wieder zurück zur Adresse des Callers + 0x8 springst. Wenn du jetzt dir die Adresse 0x10C anschaust, wirst du feststellen, das dort ebenfalls wieder zum Caller + 0x8 returned wird, allerdings wird vorher ein Wert in $v0 gespeichert; es wird also ein Wert returned. Dieser Wert wird bei dir nicht returned was zu Komplikationen führen kann.

//0x10C
if ($a0 < 1) {
return 1;
}
return 0;
1) Ok, habe es mit jr ra versucht, wie du richtig bemerkt hast ^^ ich gucke mal mit jal Smile
2) Joppo ^_^
3) Jap =)
4) Ist sie Wink Wenn ich den Wert manuell modifiziere geht es nach jedem Gameneustart / Gebietswechsel usw.
5) Nein :> Dachte das gilt nur für die Controller Address? Habs mal gefixed, aber tut sich immer noch nüscht.

Danke schonmal!

Okay, hab es mit einem jal Hook versucht, der schon in einer anderen (funktionierenden) Sub verwendet wird, die nicht von mir ist. Bis auf die Tatsache, dass mir nun 3/4 des Bildschirmtextes abhanden gekommen sind geht immer noch nix xD
Dies könnte evt. an der verwendeten JAL liegen. Die Kunst bei Subroutines ist, sie so zu schreiben, "als ob sie gar nicht existieren" würden. Dies bedeutet, du musst den originalen JAL-call preserven (erhalten).

Ich wünschte, ich könnte es dir jetzt zeigen, wie das geht, falls du Hilfe brauchst, aber ich bin zur Zeit im Urlaub. Wenn ich am Sonntag wieder zu Hause bin, bin ich gerne bereit, dir zu helfen.

Reine Neugierde: Für welches Spiel schreibst du die Subroutine?
Das wäre natürlich echt super, wenn du mir da persönlich weiterhelfen könntest =)
Habe dir mal eine PN mit meinen Kontaktmöglichkeiten zukommen lassen Wink

Noch einen schönen Urlaub Big Grin
Referenz-URLs