어셈블리어 명령어 (assembler language)
oolongeya
·2021. 8. 22. 19:43
어셈블리어는 같은 인텔 CPU에서도 인텔기반 표기 방법과 AT&T 기반 표기 방법에 차이가 있다. 디버거를 사용하여 어셈블리어를 표시할 때 표기 방법을 선택할 수 있다.
인텔 | AT&T | |
레지스터 표현 | eax | %eax |
값의 표현 | AABBCCDDh 또는 0xAABBCCDD | $0xAABBCCDD |
명령어 크기 표현 | mov | movl (long형) movb (byte형) |
메모리 주소 | [주소] | (주소) |
오퍼랜드 방향 | 목적지(dst) <- 소스(src) | 소스(src) -> 목적지(dst) |
데이터 이동 명령어
데이터 이동 방법은 다음과 같이 다섯 가지로 구분된다.
x86 : 전부 다 사용 가능
ARM : 메모리에서 메모리로 직접 이동한 것은 불가능하다
1. 값을 직접 레지스터로 대입하기
2. 레지스터에서 레지스터로 옮기기
3. 값을 직접 메모리로 대입하기
4. 레지스터에서 메모리로 또는 그 반대로 옮기기
5. 메모리에서 메모리로 옮기기
목적지 destination(dst)
소스 source(src)
mov dst, src
mov 명령어는 목적지로 값을 넣을 때 사용 src 에서 dst로 이동한다.
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+EXI*4 연산 결과가 명시한 메모리 주소의 4바이트 값을 EAX 레지스터로 복사 |
lea dst. src
lea(Load Effective Address) 는 메모리 주소를 목적지에 넣을 때 사용.
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 (부호X) / imul (부호O) | eax와 오퍼랜드를 곱셈하여 eax에 저장 | mul ebx |
div (부호X) / idiv (부호O) | eax를 오퍼랜드를 나누어 eax에 저장 | div ebx |
neg | 오퍼랜드의 2의 보수 (부호 반전) | neg eax |
제어 명령어
명령 | 설명 | 사용 예 |
cmp | 두 개의 오퍼랜드 비교 (뺄샘 연산 후 플래그 설정) |
cmp ecx, 0 |
test | 두 개의 오퍼랜드 비교 (AND 연산을 수행 후 플래그 설정) |
test eax, eax |
call | 해당되는 주소의 함수를 호출하여 수행 코드 위치를 옮김 | call 0x12345678 |
int | 오퍼랜드로 지정된 예외 처리 수행 (0xcd) 중단점으로 디버그용 소프트웨어 트랩 (0xcc) 오버플로우 예외 상황시 발생하는 트랩 (0xce) 하드웨어 디버그 트랩 (0xf1) |
int 3 int3 int0 int1 |
leave | 함수에서 사용한 지역변수 스택을 비움 | leave |
ret | 스택에 저장된 주소로 복귀 | ret |
nop | 아무 동작도 수행하지 않음 (0x90) | nop |
위 내용은 x64dbg 디버거를 활용한 리버싱과 시스템 해킹의 원리 서적의 내용을 정리한 것입니다.
저작권은 이 서적과 이 서적의 저자 김민수 님에게 있습니다.
반응형
'리버스 엔지니어링 (Reversing) > Archive' 카테고리의 다른 글
버퍼 오버플로우 공격 (Buffer overflow attack) - 2 (0) | 2021.08.20 |
---|---|
버퍼 오버플로우 공격 (Buffer overflow attack) - 1 (0) | 2021.08.20 |