기초적인 임플란트다#
x86
IntelMac 기준?
1. section#
세 개의 section 존재
section.data
: 초기값이 있는 전역 변수, static 변수 선언section.text
: 코드를 작성 공간section.bbs
: 추가적 변수 선언 공간
2. 문법#
어셈블리어는 정해진 표준이 없고, CPU에 따라 여러 종류의 문법이 존재한다. x64 Intel 기준
Opcode Operand1, Operand2 ; 주석
[]
: 해당 메모리 주소에 있는 값을 가져온당 -> 두 번 이상 올 수 없슴
3. 레지스터#
3.1 범용
rax (accumulator)
: 산술, 논리 연산을 위한 레지스터, 표준 규약에 따라 return 시 rax 반환rbx (base)
: 메모리 주소 저장rcx (count)
: 반복문에서 counter로 사용, loop가 진행될 때마다 하나씩 줄어든다rdx (data)
: 여분의 레지스터, 맘대로 사용가능
3.2 인덱스
rsi (source index)
: 복사할 데이터의 주소 저장rdi (destination index)
: 복사될 주소가 저장
표준 규약에 따라, 함수의 인자는
rdi
->rsi
->rdx
->rcx
->r8
->r9
순으로 저장.
그 이후는stack
영역에 순차적으로 저장
3.3 포인터
rsp (stack point)
: 현재 스택 주소 저장 ->push
pop
을 통해 스택 이동rbp (base point)
: 스택의 시작 지점 주소
3.4 플래그
ZF (zero flag)
: 조건 판단시 사용
4. 명령어#
4.1 조작
call
: 함수 호출ret
:rax
반환 및 함수 종료nop
: 아무것도 하지 않음jmp
: 해당 라벨로 이동
4.1.1 조건 jmp 명령
je, jz
:ZF
가 0일때jne, jnz
:ZF
가 0이 아닐때ja
: A > Bjb
: A < Bjae
: A >= Bjbe
: A <= B
등등등
4.2 산술
inc
: 1 증가dec
: 1 감소add
A
B
:A
에B
를 더한다sub
A
B
:A
에서B
를 뺀다cmp
: 비교test
:AND
xor
:xor
🗪 댓글