CF는 Carry가 일어나면 set되고 OF는 Overflow가 일어나면 set된다고만 알고 있었는데 헷갈려서 찾아보았다.
unsigned expression에서의 4-bit 연산을 보자.
1000 + 1000 = 10000은 최상단 비트가 carry된거라서 CF에 해당된다.
unsigned expression은 부호 개념이 없어서 Overflow가 의미가 없다.
signed expression에서의 4-bit 연산을 보자.
0111 + 0001 = 1000의 경우엔 MSB, 즉 Sign bit가 0에서 1이 되었으니 Overflow를 검출할 수 있고 OF에 해당한다.
CPU는 signed인지 unsigned인지 구분이 불가능하니 CF와 OF는 독립적으로 set된다.
1000 + 1000 = 10000 같은 경우는 Carry가 발생했으니 CF가 set되고 MSB가 바뀌었으니 OF가 set된다.
'SYSTEM HACKING' 카테고리의 다른 글
2022 사이버공격방어대회 CCE 예선 write-ups (1) | 2022.09.24 |
---|---|
도커 공유 디렉토리 연결 (0) | 2022.08.11 |
libc에서 /bin/sh 오프셋 찾기 (0) | 2022.08.05 |
stdin, stdout, stderr bss segment 할당 및 _IO_FILE (0) | 2022.07.22 |
execve 시스템 콜과 쉘 코드 작성 및 추출 (0) | 2022.05.24 |