티스토리 뷰
1. 데이터 전송 명령
1) mov
mov dest, src
-mov 명령은 src 오퍼랜드의 값을 desc 오퍼랜드로 이동
-이동한 후에도 src 오퍼랜드의 값은 사라지지 않기 때문에 복사라고도 할 수 있다.
2) lea
lea dest, src
-lea 명령은 src 오퍼랜드의 주소를 계산해 그 주소를 dest 오퍼랜드에 로드한다.
-주소를 계산한다는 것은 lea eax, [esp+0x40] 처럼 변위,오프셋 등을 포함한 주소를 계산한다는 말
-> 이 경우 스택 포인터가 가리키는 주소에서 변위 0x40을 더한 위치의 주소를 eax에 저장
3) xchg
xchg arg1, arg2
-xchg 명령은 arg1 오퍼랜드와 arg2 오퍼랜드의 값을 교환
4) push
push src
-push 명령은 arg 오퍼랜드의 값을 스택에 넣는다.
-ESP 레지스터의 값을 레지스터 폭만큼( 32비트에서는 4바이트, 64비트에서는 8바이트) 빼고 arg 오퍼랜드를 ESP 레지스터가 가리키는 스택의 상단에 저장
5) pop
pop dest
-pop 명령은 스택에서 arg 오퍼랜드로 값을 빼온다.
-ESP 레지스터가 가리키는 스택의 상단 값을 arg 오퍼랜드에 저장하고 ESP 레지스터의 값을 레지스터 폭만큼 더한다.
2. 연산 명령
1) add
add dest, src
-add 명령은 dest 오퍼랜드에 src 오퍼랜드를 더한 결과를 dest 오퍼랜드에 저장
2) sub
sub dest, src
-sub 명령은 dest 오퍼랜드에서 src 오퍼랜드를 뺀 결과를 dest 오퍼랜드에 저장
3) mul
mul
-mul 명령은 src 오퍼랜드에 EAX 레지스터 값을 곱하고 결과 주 상위 4바이트를 EDX 레지스터, 하위 4바이트를 EAX 레지스터에 저장
4) div
div src
-div 명령은 EDX:EAX 8바이트를 src 오퍼랜드의 값으로 나눠 몫은 EAX 레지스터, 나머지는 EDX 레지스터에 저장
5) inc , dec
inc dest
dec dest
-inc 명령과 dec 명령은 각각 dest 오퍼랜드의 갑슬 1만큼 증가,감소 시킨다.
6) cmp
cmp src1, src2
-cmp 명령은 sub 명령과 같이 뺄셈 연산을 하지만 결과는 오퍼랜드에 저장되지 않고 삭제됨
-이 명령의 목적은 플래그 레지스터의 값을 조건에 따라 변화시키는 것
7) shr , shl
shr/shl dest, count
-shr 명령과 shl 명령은 dest 오퍼랜드를 count 오퍼랜드에서 지정한 비트수 만큼 각각 오른쪽(shr), 왼쪽(shl)으로 이동
-결과는 dest 오퍼랜드에 저장
8) ror
ror/rol dest, count
-ror 명령과 rol 명령은 dest 오퍼랜드를 count 오퍼랜드에서 지정한 비트수 만큼 순환
-결과는 dest 오퍼랜드에 저장
9) xor
xor dest, src
-xor 명령은 dest 오퍼랜드와 src 오퍼랜드의 배타적 논리합을 dest 오퍼랜드에 저장
-xor eax, eax 처럼 dest와 src에 같은 레지스터를 놓고 사용하는 경우가 많고, 이 경우 같은 값에 대한 배타적 논리합이기 때문에
연산 결과는 0이다. 즉, 레지스터를 0으로 초기화 할 때 자주 사용
10) tset
test src1, src2
-test 명령은 src1 오퍼랜드와 src2 오퍼랜드의 교집합을 가져온다.
-cmp 명령과 마찬가지로 결과는 삭제
3. 분기 명령
1) jmp
jmp arg
-jmp 명령은 arg 오퍼랜드로 이동하는 명령
-조건 분기 명령과 달리 jmp 명령은 조건을 확인하지 않고 arg 오퍼랜드로 점프하기 때문에 '무조건 분기 명령'이라고도 한다.
2) call
call arg
-call 명령은 arg 오퍼랜드를 실행(호출)
-jmp 명령과 다른점은 call 명령은 호출한 후 해당 코드를 실행하고 돌아온다 -> ret 코드가 call 주소로 다시 돌려보내기 때문
3) ret
ret
-ret 명령은 call과 쌍이 되는 명령으로, 호출된 함수의 끝에 위치해 호출한 곳의 다음 명령으로 되돌아가게 한다.
-돌아갈 주소는 스택에 저장되어 있고 pop eip 와 같은 동작을 한다.
# leave 명령은 데이터 전송 명령이지만 ret 명령과 세트로 사용하는 경우가 대부분이다.
이 명령은 함수의 마지막 부분에서 ret 명령 앞에 호출되어 스택 포인터를 베이스 포인터와 같은 위치로 돌려준다.
그리고 스택에 저장되어 있던 호출자 함수 스택 프레임의 베이스 포인터를 복원한다.
즉, mov esp, ebp; pop ebp 와 같은 동작
'Programming > ASM' 카테고리의 다른 글
레지스터 (0) | 2016.11.13 |
---|
- Total
- Today
- Yesterday
- 웹해킹
- c언어
- BOF
- wargame.kr
- 자바
- 우분투
- wargame
- 설치
- attackme
- Los
- java
- my-pass
- pwnable.kr
- 파이썬
- 명령어
- lord of sqlinjection
- 워게임
- webhacking.kr
- MySQL
- Lord of SQL Injection
- 1번
- C
- 0xdeadbeef
- pwnable
- ftz
- ubuntu
- WebHacking
- Python
- lob
- cobolt
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |