2016-12-30 3 views
0

J'essaye de vider la valeur de r5 de sorte que je puisse voir ce que les données var_A0 sont. Je suis en train de jeter dans les PPC depuis que je suis en utilisant le débogage UART sur la console XBox 360,
EX): Je suis en train de comprendre ce que la valeur de var_A0 estRegistres de vidage dans PPC

addi  r5, r1, 0x110+var_A0 

code im utilise est: :

PrintKey: 
    lis  %r29, -0x8000 
    ori  %r29, %r29, 0x100 
    sldi %r3, %r29, 32 
    ori  %r3, %r3, 0x247C # 0x800001000000247C 
    li  %r4, 0x80 
    bl  printAddress 
printAddress: 
    mr  %r30, %r3 
    mr  %r11, %r4   # text size 
    mtctr %r11 

Mais cela n'imprimer le code physique dans la HV pas les registres de données

+1

Et votre question est? Qu'avez-vous essayé de faire et qu'est-ce qui ne fonctionne pas? – UnholySheep

+0

S'il vous plaît ne pas ajouter d'informations (pertinentes) telles que le code que vous avez essayé dans les commentaires, éditez-le dans le cadre de votre question – UnholySheep

+0

ok je m'excuse d'utiliser le site pour la première fois –

Répondre

0

Il y a quelques choses que vous aurez besoin de trier ici:

La fonction printAddress semble prendre une adresse dans r3, et une taille dans r4, puis (vraisemblablement) imprime le contenu de la mémoire à cette adresse. Nous n'avons aucun moyen de dire comment cette impression est faite, car le code pour le faire est absent de votre question. Par conséquent, vous ne souhaiterez probablement pas utiliser printAddress pour afficher la valeur r5. Vous pouvez probablement adapter le code d'impression réel (qui manque) pour imprimer simplement le contenu d'un registre plutôt que la mémoire.

Cependant: la chose réelle que vous voulez savoir (la valeur de var_A0) est susceptible d'être déterminée au moment de la compilation (ou au moins pendant le lien final - est-ce que ce binaire est lié statiquement?). Vérifiez le code désassemblé et/ou vérifiez les entrées de relocalisation dynamique s'il s'agit d'un exécutable dynamique.

Sinon, vous pouvez utiliser printAddress pour imprimer le contenu de la mémoire contenant l'instruction addi, puis décoder manuellement l'instruction pour déterminer la valeur immédiate utilisée dans le addi.