[Dreamhack] x86 Assembly

·2024년 1월 28일

Security

목록 보기
3/60

서론
어셈블러(Assembler) : 어셈블리어->기계어
역어셈블러(Disassembler) : 기계어->어셈블리 언어

1. 어셈블리 언어

명령어 집합구조(ISA) 종류가 많은 만큼 어셈블리어 존재

2. x64 어셈블리 언어

기본 구조
명령어(Operation Code, Opcode)+피연산자(Operand)로 구성

mov 3ax, 3
// opcode operand1 operand2
// 대입해라 eax에 3을

명령어

명령 코드
데이터 이동(Data Trasfer)mov, lea
산술 연산(Arithmetic)inc, dec, add, sub
논리 연산(Logical)and, or, xor, not
비교(Comparison)cmp, test
분기(Branch)jmp, je, jg
스택(Stack)push, pop
프로시져(Procedure)call, ret, leave
시스템 콜(System call)syscall

피연산자

  1. 상수(Immediate Value)
  2. 레지스터(Register)
  3. 메모리(Memory)
  • 메모리 피연산자는 []로 표시되며, 앞에 크기 지정자 Type PTR이 추가될 수 있음.
    -> BYTE, WORD, DWORD, QWORD : 각각 1byte, 2byte, 4byte, 8byte의 크기를 지정
  • ex1. QWORD PTR [0x8048000] : 0x8048000의 데이터를 8byte만큼 참조
  • ex2. WORD PTR [rax] : rax가 가르키는 주소에서 데이터를 2byte만큼 참조

데이터 이동

어떤 값을 레지스터나 메모리에 옮기도록 지시
1. mov dst, src : src에 들어있는 값을 dst에 대입

__
mov rdi, rsirsi의 값을 rdi에 대입
mov QWORD PTR[rdi], rsirsi의 값을 rdi가 가리키는 주소에 대입
mov QWORD PTR[rdi+8*rcx]rsi의 값을 rdi=8*rcs가 가리키는 주소에 대입


2. lea dst, src : src의 유효 주소(Effective Address, EA)를 dst에 저장합니다

_
lea rsi, [rbx+8*rcx]rbx+8*rcx를 rsi에 대입

산술 연산

사칙 연산 지시
1. add dst, src : dst에 src의 값을 더함

--
add eax, 3eax += 3
add ax, WORD PTR[rdi]ax +=(WORD)rdi


2. sub dst, src : dst에서 src의 값을 뺌

--
sub eax, 3eax -= 3
sub ax, WORD PTR[rdi]ax -=(WORD)rdi


3. inc op : op의 값을 1 증가시킴

--
inc eaxeax += 1


4. dec op : op의 값을 1 감소시킴

--
dec eaxeax -= 1

논리 연산

비트 연산 지시, 이 연산은 비트 단위로 이뤄짐

  • and dst, src : dst와 src의 비트가 모두 1이면 1, 아니면 0
  • or dst, src : dst와 src의 비트 중 하나라도 1이면 1, 아니면 0
  • xor dst, src : dst와 src의 비트가 서로 다르면 1, 같으면 0
  • not op : op의 비트 전부 반전

비교

두 피연산자의 값을 비교하고, 플래그 설정

  • cmp op1, op2 : op1과 op2를 비교, cmp는 두 피연산자를 빼서 대소를 비교함, 연산의 결과는 op1에 대입하지 않음
  • test op1, op2 : op1과 op2를 비교, test는 두 피연산자에 AND 비트연산을 취함, 연산의 결과는 op1에 대입하지 않음

분기

rip을 이동시켜 실행 흐름을 바꿈

  • jmp addr : addr로 rip을 이동시킴
  • je addr : 직전에 비교한 두 피연산자가 같으면 점프 (jump if equal)
  • jg addr : 직전에 비교한 두 연산자 중 전자가 더 크면 점프 (jump if greater)
profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글