我正在尝试转储r5
的值,以便我可以看到var_A0
数据是什么。我正试图在PPC中转储,因为我在XBox 360控制台上使用UART调试,
EX):我想弄清楚var_A0
的价值是什么
addi r5, r1, 0x110+var_A0
使用的代码是::
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
但这只打印HV中的物理代码而不是寄存器数据
答案 0 :(得分:0)
这里有一些你需要解决的问题:
printAddress
函数看起来需要r3
中的地址,大小为r4
,然后(大概)打印该地址的内存内容。我们无法告知打印是如何完成的,因为您的问题中缺少这样做的代码。
因此,您可能不希望使用printAddress
来显示r5
的值。你可以调整实际的打印代码(缺少)只打印寄存器的内容,而不是内存。
但是:您想要找出的实际内容(var_A0
的值)可能在编译时确定(或者至少在最终链接期间 - 这个二进制是静态链接的吗?)。检查反汇编代码,和/或检查动态重定位条目(如果这是动态可执行文件)。
或者,您可以使用printAddress
打印包含addi
指令的内存内容,然后手动解码指令以确定addi
中使用的立即值。