Programming Tools/Assembly_어셈블리

어셈블리어 정리노트 1

LiDARian 2021. 5. 9. 15:39
반응형

참고자료

www.youtube.com/watch?v=yf7yFJHTif8

www.youtube.com/watch?v=s6oLWpLj560

www.youtube.com/watch?v=Q8xCTztsRmw&list=PL1IheunyylbaYAzQv8bdu3hxq8YX5cKlY

 

 

어셈블리어 문법은 AT&T, INTEL, GASM등 여러 문법 체계가 있다.

 

숫자 표기

AT&T : $1, $2

INTEL : 1, 2

 

레지스터 표기 

AT&T : %RAX, %RBX

INTEL : RAX, RBX

 

참조자

AT&T : ()

INTEL : []

 

OFFSET(주어진 주소로부터의 거리)

AT&T : 4(EAX)

INTEL : [EAX + 4]

 

4. 그 외

 

주요 범용 레지스터

EAX : Extended Accumulator Register. return 값을 저장

EBX : Extended Base Register

ECX : Extended Counter Register. 반복문 조건 확인에 쓰인다. 숫자가 점점 작아지는 방향으로 크기가 조절된다.

EDX : Extended Data Register

ESI : Extended Source Index. 복사할 데이터의 주소

EDI : Extended Destination Index. 복사 목적지의 주소

ESP : Extended Stack Pointer. Stack의 끝부분 주소

EBP : Extended Base Pointer. Stack의 시작부분 주소

 

크기 비교

RAX : 64bit

EAX : 32bit

AX : 16bit

AH : 8bit. AX의 윗부분

AL : 8bit. AL의 아래부분

 

주요 명령어

PUSH/POP : 스택에서 data를 push, pop하는 명령어

MOV : 값을 대입. ESI = 0x001111 = 45일 때, MOV EAX, [ESI]는 45가 옮겨진다.

LEA : 주소를 대입. ESI = 0x001111 = 45일 때, MOV EAX, [ESI]는 0x001111가 옮겨진다.

ADD/SUB : 더하기 빼기

INC/DEC : ++ --

CALL/RET : 함수 호출/함수반환 후 다음 명령어 실행

NOP : 아무것도 안한다는 것

CMP : 두 값 비교

JMP : 특정 주소로 이동

JNE : JUMP NOT EQUAL. 값이 같지 않으면 특정 주소로 JUMP한다는 뜻

JLE : JUMP LESS OR EQUAL. 작거나 같으면 JUMP

 

디스어셈블리 하는 리눅스 명령어(GNU Assembler)

gdb [filename]

# INTEL 문법으로 보려면
set disassembly-flabor intel
set disassembly-flabor AT&T

# 특정함수 디스어셈블
disass [function name]

 

반응형