본문 바로가기
reversing/어셈블리어

어셈블리어 명령어 (1)

by 코끼리_땃쥐 2023. 3. 4.
반응형
데이터 이동 명령어 (mov)

mov dst, src

mov  명령 설명
mov eax, ebx EBX레지스터 내의 값을 EAX 레지스터로 복사
mov eax, 0x42 값 0x42를 EAX 레지스터로 복사
mov eax, [0x4037c4] 메모리 주소 0x4037C4에 있는 4바이트 값을 EAX레지스터로 복사
mov eax, [ebx] EBX 레지스터가 명시한 메모리 주소의 4바이트 값을 EAX 레지스터로 복사
mov eax, [ebx+esi*4] EBX+ESI*4 연산 결과가 명시한 메모리 주소의 4바이트 값을 EAX레지스터로 복사

 

데이터 이동 명령어  (lea)

lea des, src

메모리 주소를 목적지에 넣을 때 사용한다. lea는 주소를 저장하는데 사용하고, mov는 값을 저장하는데 사용한다.

lea와 mov의 차이 설명
lea eax, [ebx+8] EBX+8을 EAX에 저장함
mov eax, [ebx+8] EBX+8 주소에 저장된 값을 EAX에 복사

 

 

push와 pop 명령어

스택에 데이터를 넣거나 꺼내는 명령어이다.

push는 오퍼랜드 값을 스택에 넣는다. pop은 스택에서 값을 가져와 레지스터로 저장한다. 이명령어는 스택을 사용하기 때문에 스택포인터(ESP) 값이 변경된다.

 

명령어 설명
pop eax 스택에서 값을 꺼내 EAX 레지스터에 저장한다
(ESP가 4만큼 증가함)
mov eax, [esp] 스택에서 값을 읽어와 EAX에 저장함
(ESP가 변하지 않음)

 

 

산술연산 명령어

산술연산을 수행하기 위한 명령어는 다음과 같다.

사칙연산, 증감연산, 음수 연산 등이 있다.

명령 설명 사용 예
add 덧셈 add ecx, 10
sub 뺄셈 sub ecx, 5
inc 오퍼랜드 내용을 1증가 inc ecx
dec 오퍼랜드 내용을 1감소 dec ecx
mul / imul EAX와 오퍼랜드를 곱셈하여 EAX에 저장 mul ebx
div / idiv EAX를 오퍼랜드로 나누어 EAX에 저장 div ebx
neg 오퍼랜드의 2의 보수 (부호 반전) neg eax

 

비트연산 명령어
명령 설명 사용 예
and 논리곱 (AND) and eax, 0
or 논리합 (OR) or ebx, 0xffffffff
xor 배타적 논리합 (XOR) xor ebx, 0x0000ffff
not 오퍼랜드의 1의 보수 (비트 반전) not ebx
shl 왼쪽으로 오퍼랜드만큼 이동 (shift)
(최하위 비트는 0으로 채워짐)
shl eax, 1
shr 오른쪽으로 오퍼랜드만큼 이동
(최상위 비트는 부호비트로 채워짐)
shr eax, 2
rol
rcl
왼쪽으로 오퍼랜드만큼 순환 (rotate)
(최하위 비트는 최상위 비트로 채워짐)
rol eax, 1
ror
rcr
오른쪽으로 오퍼랜드만큼 순환
(최상위 비트는 최하위비트로 채워짐)
ror eax, 2
제어 명령어
명령 설명 사용 예
cmp 두 개의 오퍼랜드 비교
(뺄셈 연산을 해보고 플래고를 설정함)
cmp ecx, 0
test 두 개의 오퍼랜드를 비교
(AND 연산을 수행해보고 플래그를 설정함)
test eax, eax
call 해당되는 주소의 함수를 호출하여 수행 코드 위치를 옮김 call 0x12345678
int 오퍼랜드로 지정된 예외 처리 수행(0xcd)
중단점으로 디버그용 소프트웨어 트랩(0xcc)
오버플로우 예외 상황시 발생하는 트랩 (0xce)
하드웨어 디버그 트랩 (0xf1)
int 3
int3
into
int1
leave 함수에서 사용한 지역변수 스택을 비움 leave
ret 스택에 저장된 주소로 복귀 ret
nop 아무 동작도 수행하지 않음 (0x90) nop
반응형

'reversing > 어셈블리어' 카테고리의 다른 글

조건부 점프  (0) 2023.04.17
while 문  (0) 2023.03.24
어셈블리어 명령어 (2)  (0) 2023.03.12
함수의 사용  (0) 2023.03.06
루프  (0) 2023.03.06

댓글