• 2주차 어셈블리어

    2021. 3. 31.

    by. Sooming_

    16진수

    0 1 2 3 4 5 6 7 8 9 A B C D E F

     

    0x9 + 0x1 = 0xA

    0xF + 0x1 = 0x10

    0x6032a0 + 0x10 = 0x6032b0

    0x6032ff + 0x1 = 0x603300

     

     

     

    데이터 타입

    1byte = 8bit

    WORD = 2-byte data item

    DWORD = 4-byte data item (32bit)

    QWORD = 8-byte data item (64bit)

     

    "ABCD"

     

    낮은 주소
    0x41
    0x42
    0x43
    0x44
    높은 주소

     

    "ABCD" = “\x41\x42\x43\x44”

     

    pwndbg는 높은주소에서 낮은주소 순으로 보여줌

    Stack의 메모리 상태 볼 수 있음

     

    디버거로 위의 문자열이 저장된 메모리를 보면 0x44434241 로 저장됨

     

     

    리틀엔디안방식

    0x41424344 주소를 저장하고 싶으면 “DCBA”

    0x44434241 주소를 저장하고 싶으면 “ABCD”

     

     

     

    레지스터

    Data register

    • 32bit 

    가장 큰 레지스터 앞에 E가 붙음

     

    • 64bit 

    가장 큰 레지스터 앞에 R이 붙음

     

    Ex)  EAX, EBX, ECX, EDX / RAX, RBX, RCX, RDX

     

     

    Pointer register

    • Instruction Pointer (IP)

    실행할 명령어의 주소를 가짐

     

    • Stack Pointer (SP)

    스택의 어느 주소를 가리키면서 push 와 pop 명령어를 수행

     

    • Base Pointer (BP)

    push ebp : 함수의 가장 첫번째 명령어

    ebp 위의 스택 공간에서 명령 수행

     

    ESP
    EBP

     

     

    Index register

    • Source Index (SI)

    문자열/배열의 소스를 지정하기 위해 사용됨

     

    • Destination Index (DI)

    문자열/배열의 목적지를 지정하기 위해 사용됨

     

     

     

    함수 인자

    • 32bit 인자 순서

    push 로 스택에 집어넣고 호출

     

    • 64bit 인자 순서

    RDI, RSI, RDX, …

    read(fd, buf, n); => read(RDI, RSI, RDX);

     

    n : 최대 바이트 수

    buf (버퍼) : 입력한 값이 저장되는 주소

    fd (File Descriptor) :

     

    0 표준 입력 (read 함수와 사용)
    1 표준 출력 (write 함수와 사용)
    2 표준 에러

     

     

     

    어셈블리어 명령어

    PTR

    : 데이터 타입을 재정의하는 명령어

    Ex) qword ptr : 8바이트 타입으로 재정의

     

    MOV

    : 복사

      mov 에서는 사칙연산 불가능

      [ ] 를 통해 주소를 참조

    Ex) mov    rax, rbp

         sub    rax, 16

     

    LEA

    : 주소 복사

    Ex) lea    rax, rbp - 16

     

    PUSH

    : 스택에 데이터 삽입 ( - 연산)

     

    POP

    : 스택에서 가장 위의 데이터 제거 ( + 연산)

     

    CMP : 조건문

    : 비교 명령 ( - 연산 수행)

     

     

     

    어셈블리 프로그램

    • data section : 런타임 동안 이 섹션에 선언된 데이터는 변하지 않음  Ex) 상수, 파일 이름 등
    • bss section : 변수
    • text section : 코드

    'Hacking > Pwnable' 카테고리의 다른 글

    1주차 리눅스 환경 구축  (0) 2021.03.31

    댓글