관리 메뉴

Jsecurity

어셈블리 조건분기 명령어 본문

프로그래밍언어/리버싱 입문

어셈블리 조건분기 명령어

Great king 2019. 6. 9. 22:10

cmp (compare)

- 두 피연산자를 비교하는 명령어

- 레지스터나 메모리의 값을 변경하지 않는다

- 플래그 레지스터에만 영향을 준다 (flag reguster - 상태 레지스터)

-> SF (부호), CF (올림수), ZF (0, 두개의 비교값이 같을 때)

 

결과가 0인 경우 -> SF:0, CF:0, ZF: 1

결과가 음수인 경우 -> eax < ebx => SF:1, CF:0, ZF:0

결과가 양수인 경우-> eax > ebx => SF:0, ZF:0, CF:0

 

jmp 명령어

- 조건없이 분기하는 명령어

- 제어를 전달하는데 일반적으로 사용되는 명령어

- JMP 계열 명령어들은 플래그 레지스터의 플래그를 보고 명령어 수행

 

조건 분기 명령어 (부호없는 데이터)

명령어 조건(CMP) 비교 Fullname
JA > Jump if Above
JB < Jump if Below
JAE >= Jump if Above or Equal
JBE <= Jump if Below or Equal
JE = Jump if Equal
JNE != Jump if Not Equal

 

조건부 점프 명령어

명령어 설명  테스트 플래그
JCXZ Jump if CX is Zero 없음
JC Jump Carry CF
JNC Jump No Carry CF
JO Jump Overflow OF
JNO Jump Not Overflow OF
JP / JPE Jump Parity / Jump Parity Even PF
JNP / JPO Jump Not Parity / Jump Parity Odd PF
JS Jump Sign(음수) SF
JNS Jump Not Sign(양수) SF

 

[실습1] 

 

[연습문제]

- 사용자로부터 3개의 숫자(2byte)를 입력 받아 메모리에 저장하고, 가장 큰 숫자와 가장 작은 숫자를 선택해서 각각 max, min이라는 변수에 저장하라.

 

- max * min을 계산하여 total 변수에 저장하고 total을 출력하라

 

[결과]

[풀이]

 

[결과창]

'프로그래밍언어 > 리버싱 입문' 카테고리의 다른 글

[풀이] abex crackme 1  (0) 2019.09.08
레지스터  (0) 2019.08.21
어셈블리 조건 분기문  (0) 2019.06.03
어셈블리 산술명령어 (Div)  (0) 2019.04.14
어셈블리 산술명령어 (Mul)  (0) 2019.04.14
Comments