참고자료
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]
'Programming Tools > Assembly_어셈블리' 카테고리의 다른 글
어셈블리어 정리노트 4 - 조건 분기 명령어 (0) | 2021.05.26 |
---|---|
어셈블리어 정리노트 3 - 주소 참조 연산자 [], 오프셋, 인덱스 (dereference, offset, index) (0) | 2021.05.26 |
어셈블리어 정리노트 3 - JMP, INC, DEC, ADD, SUB (0) | 2021.05.19 |
어셈블리어 정리노트 2 (0) | 2021.05.10 |