我试图移植一个具有一些基本位移位来解密缓冲区的遗留应用程序,但是我丢失了这个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
非常感谢任何协助。
答案 0 :(得分:0)
如果PowerPC是32位,则需要将“long long”(64位)分成2个32位寄存器。您还有其他具体问题吗?