1. 어셈블리 명령어
연산기능 |
산술 연산 |
ADD(+) , SUB(-) , MUL(*) , DIV(/), CMP(비교) |
논리 연산 |
NOT(!), AND(&), OR(|), XOR(^), SHIFT(>>, <<) |
|
자료전달 기능 |
MOV, PUSH, POP |
|
제어기능 |
JMP, CALL, RET, INT |
2. 명령어 형식
- opcode (0-주소 형식)
- opcode operand (1-주소 형식)
- opcode operand1 operand2
- 스택 이용
- 예) ADD
- 누산기 이용
- ADD eax
- 2주소 형식
- opcode로 operand1과 operand2를 연산한 결과가 operand1에 저장된다.
3. 어셈블리 코드 분석해보기
<+0>: push ebp |
push ebp mov ebp, esp // 함수의 시작 프롤로그 부분 sub esp, 0x20 mov DWORD PTR [esp+0x1c], 0x1
mov eax,0x8048520 mov edx,DWORD PTR [esp+0x18] mov DWORD PTR [esp+0x14],0x0 jmp 0x8048452 <main+142> // esp+0x14에 0을 넣고 main+142 부분으로 점프 cmp DWORD PTR [esp+0x14],0x9 jle 0x8048419 <main+85> // cmp 의 A 부분이 B보다 작거나 같으면 jmp. esp+0x14 = 0 이므로 점프 mov eax,DWORD PTR [esp+0x18] mov edx,DWORD PTR [esp+0x1c] mov DWORD PTR [esp+0x10],eax // [esp+0x10] = [esp+0x18] + [esp+0x1c] * 1 mov eax,0x8048520 mov eax,DWORD PTR [esp+0x18] mov DWORD PTR [esp+0x1c],eax // esp+0x1c = esp+0x18 cmp DWORD PTR [esp+0x14],0x9 jle 0x8048419 <main+85> // 반복 | ||
위의 어셈블리 코드를 리버싱해서 만든 C 코드>
결과>
'미분류' 카테고리의 다른 글
DDoS 공격 대응 (0) | 2018.06.15 |
---|---|
170317 동적할당 과 malloc함수 (0) | 2017.03.19 |
170316 Caller & Callee , 함수 호출 규약 (0) | 2017.03.16 |
170314 리눅스, 우분투 설치 및 C 소양교육 (0) | 2017.03.16 |
170315 C (포인터, 반복문) (0) | 2017.03.16 |