본문 바로가기

Malware Analysis/- Knowledge storage

adc, sbb, carry flag, overflow flag 이해하기(+cmp)

what is the adc, sbb??  

 

해석을 해보자면..( 못하지만)

당신 프로세서 레지스터 사이즈보다 수가 더해지거나 빼질 경우 ADC SBB 지시자를 사용할 있다고 한다.

add dest, source dest = dest + source라고한다면, adc dest = dest + source + carry flag

sub dest, source dest = dest - source라고한다면,  sbb dest = dest - source - carry flag 이다.

 

 

 

그렇다면 carry flag란 무엇인가.

carry flag는 overflow flag와 혼동될 수 있는 flag이다. 둘의 차이에 대해 알아보자.

예를 들어, (4bit 연산을 한다고 가정)  1000+1000 = 10000 --> 비트가 흘러넘치게된다.

여기서 비트가 흘러넘치기 때문에 overflow flag가 set된다고 생각을 하는데, carry flag가 set된다.

즉, carry flag는 최상단 비트에서 캐리가 생겼을 경우 set된다.

다시 예를 들어, (4bit) 0111 + 0001 = 1000는 overflow flag가 set된다. 왜냐하면 signed expression이라고 가정 했을 때

최대 표현 숫자를 넘어서서 부호가 바뀌었기 때문이다.  

carry flag는 특히 cmp에서 유용하게 사용된다. 첫 번째 피연산자가 두 번째 피연산자보다 더 작으면 carry flag가 on이 된다.

반대로 off면 크거나 같다고 보면 된다.

 

 

 

'Malware Analysis > - Knowledge storage' 카테고리의 다른 글

Remote deburger  (0) 2018.03.04
해시(hash) vs 암호화(encryption)  (0) 2018.02.26
JSON??  (0) 2018.01.30
malwares,virustotal python script  (0) 2018.01.30
assembly div, idiv, cdq  (1) 2018.01.23