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 |