|
Verfasser |
Nachricht |
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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
Lg~
Dieser Beitrag wurde zuletzt bearbeitet: 12.08.2011 13:28 von _Vuze_.
|
|
12.08.2011 11:25 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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...
|
|
12.08.2011 14:01 |
|
|
|
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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
|
|
12.08.2011 14:22 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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 Anmerkungen und Verbesserungen willkommen ...
VG
|
|
12.08.2011 17:47 |
|
Folgende User bedanken sich: |
|
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
Also müsste ich bei Adresse 0x123456 konkret nach 0x12 sowie 0x3456 suchen im Disassembly (im einfachsten Fall, den ich jetzt einfach mal erhoffe )?
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 =)
|
|
12.08.2011 17:59 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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...
|
|
13.08.2011 09:54 |
|
|
|
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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).
Dieser Beitrag wurde zuletzt bearbeitet: 13.08.2011 10:30 von _Vuze_.
|
|
13.08.2011 10:28 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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...
|
|
14.08.2011 12:50 |
|
|
|
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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)
|
|
15.08.2011 09:11 |
|
|
|
PSP_Lord
Durchstarter
Beiträge: 87
Gruppe: User
Registriert seit: Sep 2010
Status:
Abwesend
Danke erhalten: 133
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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;
|
|
15.08.2011 12:20 |
|
Folgende User bedanken sich: |
|
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
1) Ok, habe es mit jr ra versucht, wie du richtig bemerkt hast ^^ ich gucke mal mit jal
2) Joppo ^_^
3) Jap =)
4) Ist sie 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
Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2011 14:42 von _Vuze_.
|
|
15.08.2011 14:17 |
|
|
|
PSP_Lord
Durchstarter
Beiträge: 87
Gruppe: User
Registriert seit: Sep 2010
Status:
Abwesend
Danke erhalten: 133
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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?
|
|
15.08.2011 19:45 |
|
|
|
_Vuze_
Experte
Beiträge: 630
Gruppe: User
Registriert seit: Sep 2008
Status:
Offline
Danke erhalten: 375
|
RE: Adresse x im Speicher finden, die Wert nach Adresse y schreibt?
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
Noch einen schönen Urlaub
|
|
15.08.2011 20:12 |
|
|
|