通过位旋转了解PowerPC汇编程序功能

时间:2011-08-18 18:47:09

标签: assembly powerpc

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

这是PPC函数,它有一个参数我认为缓冲区(params是: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&amp; R30

非常感谢任何协助。

1 个答案:

答案 0 :(得分:0)

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