Понимание функции ассемблера PowerPC с поворотом бита - PullRequest
1 голос
/ 18 августа 2011

Я пытаюсь портировать старое приложение, которое имеет некоторые базовые сдвиги битов для расшифровки буфера, но я потерял этот код 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;     
}

Например, почему крипта делится на два регистра r29 и r30

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 22 августа 2011

Если PowerPC 32-битный, то «длинный длинный» (64 бита) нужно будет разделить на 2 32-битных регистра. Есть ли у вас другие конкретные вопросы?

...