본문 바로가기

리버싱!

ROR,ROL C++ 구현

리버싱을 하다보면 ROL(Rotate Left이나 ROR(Rotate Right)이 나오게 되는데 rotate되는 시프트연산으로써 역산을 할때 필요한 경우가 있다. VS에서 32비트 64비트 ROL ROR은 구현되어 있는듯한데 8비트는 없어서 매번 검색하기보단 백업용으로 저장해둔다.

 

ROR

unsigned char ror( unsigned char v, unsigned char x ){
    int i=0;
    loop:
    if( i==x )
        return v;
    i++;
	unsigned char temp = v & 1;
	v >>= 1;
	v |= ( temp<<7 ); 
    goto loop;
}

 

 

ROL

unsigned char rol(unsigned char v, unsigned char x) {
	int i = 0;
loop:
	if (i == x)
		return v;
	i++;
	unsigned char temp = v & 128; 
	v <<= 1;  // 
	v |= (temp >> 7); // 최대비트수
	goto loop;
}

temp가 CF Flag의 역할로 ror일땐 low bit가 rol일땐 high bit로 체크해야된다. 

 

출처-cplusplus.com/forum/beginner/88341/

.

def __ROL__(num, count, bits=8): 
	return ((num << count) | (num >> (bits - count))) & ((0b1<<bits) - 1) 
def __ROR__(num, count, bits=8): 
	return ((num >> count) | (num << (bits - count))) & ((0b1<<bits) - 1)

python version

'리버싱!' 카테고리의 다른 글

방독면책-15  (0) 2021.06.01
방독면책-14  (0) 2021.05.27
방독면책-13  (0) 2021.05.06
방독면책-12  (0) 2021.05.03
방독면책-11  (0) 2021.04.28