我试图移植一个遗留应用程序,该应用程序具有一些基本的位移来解密缓冲区,但是我迷失了这个 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
任何帮助将不胜感激。