[Dreamhack - System Hacking] STAGE 2 : x86 Assembly : Essential Part(1)

eunee22·2023년 7월 1일

Dreamhack/SystemHacking

목록 보기
5/12

어셈블리어란?

  • 어셈블리어 : 컴퓨터가 사용하는 언어인 기계어(0,1)와 치환되는 조금 더 인간이 이해하기 쉬운 언어
  • 어셈블러(어셈블리 언어 → 기계어) ↔ 역어셈블러(기계어 ↔ 역어셈블러)
  • 기계어와 어셈블리어는 ISA에 따라 다양

어셈블리어의 기본 구조(x86)

  • 명령어 → 동사

    1. 데이터 이동 : 어떤 값을 레지스터나 메모리에 이동

      • move dest, scr : src의 값을 dest에 저장
      • lea dest, src : src의 유효주소를 dest에 저장
    2. 산술 연산 : 사칙연산을 수행

      • add dest. src : dest에 src의 값 더하기
      • sub dest. src : dest에 src의 값 빼기
      • inc op : op의 값 1 증가
      • dec op : op의 값 1 감소
    3. 논리 연산 : 비트 연산을 수행

      • and dest, src : dest와 src의 비트가 모두 1이면 1, 아니면 0
      • or dest, src : dest와 src의 비트 중 하나라도 1이면 1, 아니면 0
      • xor dest, src : dest와 src의 비트가 서로 다르면 1, 같으면 0
      • not op : op의 비트 전부 반전
    4. 비교 : 두 연산자의 값을 비교 후 플래그(ZF) 설정

      • cmp op1, op2: op1과 op2를 비교
        • 두 연산자를 빼서 0인지 아닌지의 결과를 통해 판단
      • test op1, op2: op1과 op2를 비교
        • 두 연산자에 and 연산
      • 같으면 ZF = 1 (zero flag true), 다르면 0
    5. 분기 : rip를 이동시켜 실행 흐름을 변경

      • jmp addr: addr로 rip를 이동시킵니다.
      • je addr: 직전에 비교한 두 피연산자가 같으면 점프
      • jg addr: 직전에 비교한 두 연산자 중 전자가 더 크면 점프
  • 피연산자 → 목적어

    • 상수
    • 레지스터
    • 메모리
      • [ ]로 둘러쌓여 표현
      • 앞에 크기 지정자 → TYPE PTR 형식 TYPE의 종류
        • BYTE → 1byte
        • WORD → 2byte
        • DWORD → 4byte
        • QWORD → 8byte
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글