기초적인 임플란트다#
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): 현재 스택 주소 저장 ->pushpop을 통해 스택 이동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 감소addAB:A에B를 더한다subAB:A에서B를 뺀다cmp: 비교test:ANDxor:xor
🗪 댓글