티스토리 뷰
0. 분기 명령어
1. IF.exe 명령어 의미 해석 및 C언어 복구
2. IF_hard.exe 명령어 의미 해석 및 정답(숫자) 찾기
0. 분기 명령어
명령 | 조건 | 설명 |
JE / JZ | ZF = 1 | 결과가 0이면 점프 |
JNE / JNZ | ZF = 0 | 결과가 0이 아니면 점프 |
JG | ZF = 0 AND SF = OF | (부호 있는) 결과가 크면 점프 |
JGE | SF = OF | (부호 있는) 결과가 크거나 같으면 점프 |
JL | SF != OF | (부호 있는) 결과가 작으면 점프 |
JLE | ZF = 1 OR SF !=OF | (부호 있는) 결과가 작거나 같으면 점프 |
JA | CF = 0 AND ZF = 0 | (부호 없는) 결과가 크면 점프 |
JAE | CF = 0 | (부호 없는) 결과가 크거나 같으면 점프 |
JB | CF = 1 | (부호 없는) 결과가 작으면 점프 |
JBE | CF = 1 OF ZF = 1 | (부호 없는) 결과가 작거나 같으면 점프 |
JC / JS / JO / JP | CF = 1 / SF = 1 / OF = 1 / PF = 1 | CF / SF / OF / PF 가 1이면 점프 |
JNC / JNS / JNP | CF = 0 / SF = 0 / PF = 0 | CF / SF / PF 가 0이면 점프 |
1. IF.exe 명령어 의미 해석 및 C언어 복구
[ 명령어의 의미 - if.exe ]
013E1080 /$ 55 PUSH EBP ; 프롤로그 - 스택의 처음 위치 설정
013E1081 |. 8BEC MOV EBP,ESP ; 프롤로그 - 스택의 마지막 위치 설정
013E1083 |. 83EC 08 SUB ESP,8
013E1086 |. A1 50303E01 MOV EAX,DWORD PTR DS:[13E3050> ; 카나리 (메모리 보호기법)
013E108B |. 33C5 XOR EAX,EBP ; 카나리
013E108D |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 카나리
013E1090 |. 68 00303E01 PUSH if.013E3000 ; "숫자를 입력하시오 : "를 스택에 저장
013E1095 |. E8 46000000 CALL if.013E10E0 ; printf 함수 호출
013E109A |. 83C4 04 ADD ESP,4
013E109D |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
013E10A0 |. 50 PUSH EAX
013E10A1 |. 68 18303E01 PUSH if.013E3018 ; "%d"를 스택에 저장
013E10A6 |. E8 75000000 CALL if.013E1120 ; scanf 함수 호출
013E10AB |. 83C4 08 ADD ESP,8
013E10AE |. 837D F8 63 CMP DWORD PTR SS:[EBP-8],63 ; [EBP-8]의 주소 값에서 99를 빼는 연산
013E10B2 |. 7E 0D JLE SHORT if.013E10C1 ; 결과가 작거나 같으면 return 0;로 점프
013E10B4 |. 68 1C303E01 PUSH if.013E301C ; "입력하신 숫자의 자리수는 세자리 이상입니다.\n"를 스택에 저장
013E10B9 |. E8 22000000 CALL if.013E10E0 ; printf 함수 호출
013E10BE |. 83C4 04 ADD ESP,4
013E10C1 |> 33C0 XOR EAX,EAX ; return 0;
013E10C3 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] ; 카나리 (메모리 보호기법)
013E10C6 |. 33CD XOR ECX,EBP ; 카나리
013E10C8 |. E8 8E000000 CALL if.013E115B ; 카나리
013E10CD |. 8BE5 MOV ESP,EBP ; 에필로그
013E10CF |. 5D POP EBP ; 에필로그 - 스택의 처음 위치 해제
013E10D0 \. C3 RETN ; 에필로그 - 함수를 호출한 지점으로 돌아감 (종료)
2. IF_hard.exe 명령어 의미 해석 및 정답(숫자) 찾기
[ 명령어의 의미 - if_hard.exe ]
00C41080 /$ 55 PUSH EBP ; 프롤로그 - 스택의 처음 위치 설정
00C41081 |. 8BEC MOV EBP,ESP ; 프롤로그 - 스택의 마지막 위치 설정
00C41083 |. 83EC 08 SUB ESP,8
00C41086 |. A1 0430C400 MOV EAX,DWORD PTR DS:[C43004] ; 카나리 (메모리 보호기법)
00C4108B |. 33C5 XOR EAX,EBP ; 카나리
00C4108D |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 카나리
00C41090 |. 68 F020C400 PUSH If_hard.00C420F0 ; "숫자를 입력하시오(1~1000) : "를 스택에 저장
00C41095 |. E8 E6000000 CALL If_hard.00C41180 ; printf 함수 호출
00C4109A |. 83C4 04 ADD ESP,4
00C4109D |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00C410A0 |. 50 PUSH EAX ; /Arg2
00C410A1 |. 68 1021C400 PUSH If_hard.00C42110 ; "%d"를 스택에 저장
00C410A6 |. E8 15010000 CALL If_hard.00C411C0 ; scanf 함수 호출
00C410AB |. 83C4 08 ADD ESP,8
00C410AE |. 837D F8 0A CMP DWORD PTR SS:[EBP-8],0A ; [EBP-8]과 10 대소비교
00C410B2 |. 7F 12 JG SHORT If_hard.00C410C6 ; [EBP-8]이 더 크면 912와 비교하는 곳으로 점프
00C410B4 |. 68 1421C400 PUSH If_hard.00C42114 ; "Not here~\n"를 스택에 저장
00C410B9 |. E8 C2000000 CALL If_hard.00C41180 ; printf 함수 호출
00C410BE |. 83C4 04 ADD ESP,4
00C410C1 |. E9 A0000000 JMP If_hard.00C41166 ; 조건없이 return 0;로 점프
00C410C6 |> 817D F8 9003>CMP DWORD PTR SS:[EBP-8],390 ; [EBP-8]과 912 대소비교
00C410CD |. 7C 12 JL SHORT If_hard.00C410E1 ; [EBP-8]이 더 작으면 200과 비교하는 곳으로 점프
00C410CF |. 68 2021C400 PUSH If_hard.00C42120 ; "no no\n"를 스택에 저장
00C410D4 |. E8 A7000000 CALL If_hard.00C41180 ; printf 함수 호출
00C410D9 |. 83C4 04 ADD ESP,4
00C410DC |. E9 85000000 JMP If_hard.00C41166 ; 조건없이 return 0;로 점프
00C410E1 |> 817D F8 C800>CMP DWORD PTR SS:[EBP-8],0C8 ; [EBP-8]과 200 대소비교
00C410E8 |. 75 0F JNZ SHORT If_hard.00C410F9 ; [EBP-8]이 200과 같지 않으면 250과 비교하는 곳으로 점프
00C410EA |. 68 2821C400 PUSH If_hard.00C42128 ; "try again\n"를 스택에 저장
00C410EF |. E8 8C000000 CALL If_hard.00C41180 ; printf 함수 호출
00C410F4 |. 83C4 04 ADD ESP,4
00C410F7 |. EB 6D JMP SHORT If_hard.00C41166 ; 조건없이 return 0;로 점프
00C410F9 |> 817D F8 FA00>CMP DWORD PTR SS:[EBP-8],0FA ; [EBP-8]과 250 대소비교
00C41100 |. 7E 57 JLE SHORT If_hard.00C41159 ; [EBP-8]이 더 작거나 같으면 "more harder/n"으로 점프
00C41102 |. 817D F8 C702>CMP DWORD PTR SS:[EBP-8],2C7 ; [EBP-8]과 711 대소비교
00C41109 |. 7E 0F JLE SHORT If_hard.00C4111A ; [EBP-8]이 더 작거나 같으면 573과 비교하는 곳으로 점프
00C4110B |. 68 3421C400 PUSH If_hard.00C42134 ; "nop!\n"을 스택에 저장
00C41110 |. E8 6B000000 CALL If_hard.00C41180 ; printf 함수 호출
00C41115 |. 83C4 04 ADD ESP,4
00C41118 |. EB 3D JMP SHORT If_hard.00C41157 ; 조건없이 return 0;로 점프
00C4111A |> 817D F8 3D02>CMP DWORD PTR SS:[EBP-8],23D ; [EBP-8]과 573 대소비교
00C41121 |. 7F 0F JG SHORT If_hard.00C41132 ; [EBP-8]이 더 크면 575와 비교하는 곳으로 점프
00C41123 |. 68 3C21C400 PUSH If_hard.00C4213C ; "you missed it\n"을 스택에 저장
00C41128 |. E8 53000000 CALL If_hard.00C41180 ; printf 함수 호출
00C4112D |. 83C4 04 ADD ESP,4
00C41130 |. EB 25 JMP SHORT If_hard.00C41157 ; 조건없이 return 0;로 점프
00C41132 |> 817D F8 3F02>CMP DWORD PTR SS:[EBP-8],23F ; [EBP-8]과 575 대소비교
00C41139 |. 7C 0F JL SHORT If_hard.00C4114A ; [EBP-8]이 더 작으면 "oh how can find?\n"으로 점프
00C4113B |. 68 4C21C400 PUSH If_hard.00C4214C ; "almost there\n"을 스택에 저장
00C41140 |. E8 3B000000 CALL If_hard.00C41180 ; printf 함수 호출
00C41145 |. 83C4 04 ADD ESP,4
00C41148 |. EB 0D JMP SHORT If_hard.00C41157 ; 조건없이 return 0;로 점프
00C4114A |> 68 5C21C400 PUSH If_hard.00C4215C ; "oh how can find?\n"를 스택에 저장
00C4114F |. E8 2C000000 CALL If_hard.00C41180 ; printf 함수 호출
00C41154 |. 83C4 04 ADD ESP,4
00C41157 |> EB 0D JMP SHORT If_hard.00C41166 ; 조건없이 return 0;로 점프
00C41159 |> 68 7021C400 PUSH If_hard.00C42170 ; "more harder\n"을 스택에 저장
00C4115E |. E8 1D000000 CALL If_hard.00C41180 ; printf 함수 호출
00C41163 |. 83C4 04 ADD ESP,4
00C41166 |> 33C0 XOR EAX,EAX ; return 0;
00C41168 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] ; 카나리 (메모리 보호기법)
00C4116B |. 33CD XOR ECX,EBP ; 카나리
00C4116D |. E8 89000000 CALL If_hard.00C411FB ; 카나리
00C41172 |. 8BE5 MOV ESP,EBP ; 에필로그
00C41174 |. 5D POP EBP ; 에필로그 - 스택의 처음 위치 해제
00C41175 \. C3 RETN ; 에필로그 - 함수를 호출한 지점으로 돌아감 (종료)
- Total
- Today
- Yesterday
- Char
- long
- History 객체
- 키워드
- 변수
- 컴파일
- Document Object Model
- bom
- DOM
- 리액트 #React #props #state #javascript
- Screen 객체
- gcc
- Navigator 객체
- stdio.h
- keyword
- window 객체
- location 객체
- int
- Browser Object Model
- short
- c언어
- 자료형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |