1

我试图移植一个遗留应用程序,该应用程序具有一些基本的位移来解密缓冲区,但是我迷失了这个 powerpc 代码 - 我尽力理解它并添加了注释并创建了一个伪 c 函数但是显然有些不对劲。

这是 PPC 函数,它有一个参数,我认为缓冲区(参数是:void *,int)http://pastebin.com/RNRAWCpi

就我的伪 c 而言,这是先进的:

unsigned long long* data=(unsigned long long*)pBuffer; // file data
unsigned long long crypt = 0x0000;
unsigned long long next_crypt;
unsigned int len = size >> 3;

for(unsigned int i=0; i<len;i++) {
    next_crypt = crypt+data[i]-0x9A6C9A19;      
    data[i] = ((data[i]<<0x18)|(data[i]>>0x14))+0x9A6C9A19;
    data[i] =  (data[i]<<0x3)|(data[i]>>0x29);
    data[i] = data[i] - crypt;
    crypt = next_crypt;     
}

比如为什么crypt被拆分成两个寄存器r29 & r30

任何帮助将不胜感激。

4

1 回答 1

0

如果 PowerPC 是 32 位,则需要将“long long”(64 位)拆分为 2 个 32 位寄存器。您还有其他具体问题吗?

于 2011-08-22T11:19:23.053 回答