1
我试图移植一个传统的应用程序,它有一些基本的位移解密缓冲区,但我失去了这个PowerPC代码 - 我尽我所能了解它,并添加了评论,并创建了一个伪然而,c函数显然是不正确的。了解PowerPC汇编器函数的位旋转
这是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 & r30
任何帮助将不胜感激。
谢谢 - 你碰巧知道我的错误是与翻译到伪c函数?你能看到一个明显的错误吗? – Steve
看来你的旋转是使用十进制格式,而你的C代码是十六进制格式“rotrwi r11,r10,14”(0x0E)14!= 0x14(20) –
啊谢谢你,我没有看到 - 你碰巧知道powerpc asm社区这些问题是否更好? – Steve