gpt4 book ai didi

xbox360 - 对 PowerPC 的寄存器值感到困惑?

转载 作者:行者123 更新时间:2023-12-01 12:43:20 26 4
gpt4 key购买 nike

所以,我一直在为 Xbox 的简单逆向项目学习 PowerPC,但我总是在这样的事情上纠结。

    lwz       r11, 0(r29)   # Loads 0x34 from 0x10710 and stores in r11
lwz r10, 4(r29) # Loads 0x64 from 0x10714 and stores in r10
addi r11, r11, 0x7F # r11 = 0x34 + 0x7F = r11 = 0xE3
clrrwi r10, r10, 7 # r10 = r10 (0x64) + 0xFFFFFF80
clrrwi r31, r11, 7 # r31 = r11 (0xE3) & 0xFFFFFF80

无论如何,我无法理解的是最后两行。一个寄存器怎么可能有一个值 + 另一个值?另一个寄存器怎么会有一个值和另一个值?如果我在下一行添加加法,我会添加什么值?抱歉,这是一个奇怪的过渡,因为我的母语是 C++ 和 C#,我不想放弃这个,因为尽管我遇到了麻烦,但它非常有趣。

最佳答案

我不明白注释“# r10 = r10 (0x64) + 0xFFFFFF80”中的“+”,这可能是错字。但我理解下一行的注释“# r31 = r11 ( 0xE3) & 0xFFFFFF80”。

如果您查看 PowerPC 2.02 Book 1 documentation对于“Rotate Left Word Immediate then AND with Mask M-form”,它显示了对 clrrwi 实际做了什么。

clrrwi Rx,Ry,n

相当于

rlwinm Rx,Ry,0,0,31-n

对于 clrrwi,rlwinm 循环左移字 0 位,因此 clrrwi 指令没有完成循环。它生成一个掩码,其中 0-24 位为 1,其他位置(25-31 位)为零,因此为 n=7 生成的掩码为 0xFFFFFF80。旋转后的数据与生成的掩码进行 AND 运算,因此这就是第二个 clrrwi 的注释有意义的原因。 clrrwi 正在生成一个掩码以清除一个字中右边的 n 位,而 0xFFFFFF80 是用于清除的掩码。

顺便说一下,0x34+0x7F=0xB3。

关于xbox360 - 对 PowerPC 的寄存器值感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com