eli_ez3r
eli_ez3r
eli_ez3r
전체 방문자
오늘
어제
  • 분류 전체보기 (202)
    • 0x01 끄적끄적 :) (57)
      • Network (5)
      • Security (14)
      • Reversing (2)
      • Forensic (5)
      • Operation System (10)
      • Development (10)
      • Solution (7)
      • 보안 상식 (3)
    • 0x02 Study :) (127)
      • Pwnable (59)
      • Webhacking (56)
      • Reversing (11)
      • Machine Learning (1)
    • 0x03 ETC :) (16)
      • IT Unpacking (5)
      • IT Information (1)
      • Enjoy (4)
      • Etc (6)
    • Admin :) (0)
      • 0x01 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • github.io 블로그 개설

인기 글

태그

  • 패스워드
  • password
  • school
  • pwnable
  • hack
  • BOF
  • LEVEL
  • 풀이
  • 오버플로우
  • 과정
  • 공격
  • overflow
  • write
  • 메모리
  • 스쿨
  • hacker
  • hacking
  • 해킹
  • web
  • 암호
  • 해커
  • 문제
  • attack
  • Up
  • buffer
  • 문제풀이
  • hakcing
  • webhacking.kr
  • 설명
  • LOB

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

리틀엔디안(Little-endian) 빅엔디안(Big-endian)
0x01 끄적끄적 :)/보안 상식

리틀엔디안(Little-endian) 빅엔디안(Big-endian)

2017. 9. 22. 14:17



분석하는 과정에서 꼭 알고 넘어가야 하는 부분이 바이트오더(Byte-order)이다.


우리가 사용 하는 컴퓨터에는 cpu라는 두뇌역할을 하는 하드웨어가 있는데, cpu의 제조사에 따라서 바이트 오더가 다르다.


크게 바이트 오더는 2가지로 나누어 진다.


리틀엔디안(Little-endian), 빅엔디안(Big-endian)


 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 

바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다. 

- 출처 : 위키백과 -


리틀엔디안(Little_endian) vs 빅엔디안(Big-endian)

주로 인텔(intel) 프로세스 계열에서 사용되는 바이트오더이다.


리틀엔디안은 데이터를 메모리에 적재 할 때, 메모리 시작주소에 데이터의 하위 바이트부터 적재한다는 특징이 있고


빅엔디안은 반대로 메모리 시작주소에 데이터의 상위 바이트부터 적재한다는 특징이 있다.



[도표] 레지스터와 메모리 위치 매핑 관계 , 출처 : 위키피디아(www.wikipedia.org)


위 도표를 보면 어느정도 쉽게 이해할 수 있을 것이다. 레지스터에서 읽는 순서와, 메모리에 적재되는 순서를 나타내어 지고 있다.


보통 네트워크상의 패킷을 분석하면 모두 빅엔디안 방식이다.


네트워크 프로토콜에서 빅엔디안 방식으로 하기로 약속 했기 때문이다.


빅 엔디안을 표현하면 아래와 같다.


출처 : 위키피디아


기본적으로 데이터를 메모리에 적재할 때에는, 낮은 주소부터 데이터를 적재하게 된다.


빅 엔디안은 0x0A0B0C0D라는 데이터를 메모리에 적재 한다고 할 때, 상위 데이터(0x0A)부터 적재한다.



리틀 엔디안을 표현하면 아래와 같다.



리틀엔디안은 0x0A0B0C0D라는 데이터를 메모리에 적재 한다고 할 때, 하위 데이터(0x0D)부터 적재한다.



정리하자면, 

데이터가 메모리에 적재될 때, 메모리의 낮은 주소부터 적재되게 되는데,

리틀엔디안은 데이터의 하위 데이터부터 메모리에 적재된다.

빅엔디안은 데이터의 상위 데이터부터 메모리에 적재된다.



리틀 엔디안을 왜 나왔을까?


가산기를 설계할 때 올림수를 계산하기 편하고, 빠르기 위함입니다.

예를들어, 15+1을 계산 한다고 할 때.
1) 빅엔디안 방식으로 계산을 하면
0x0000000F + 0x00000001 = 0x00000010 으로 계산 후 최하위 바이트로 이동해서 올림수가 발생한다.

2) 리틀엔디안 방식으로 계산을 하면
0x0F000000 + 0x01000000 = 0x10000000 으로 올림수를 계산 할 때 최상위 바이트에서 바로 올림수가 가능하기 때문이다.

컴퓨터의 초기 시절에는 이러한 방식이 계산 속도에 많은 영향을 끼칠 지 모르지만, 현대 컴퓨터의 성능은 매우 발전하여
두 방식의 차이로 느껴지는 속도는 사람이 체감하기 어렵다.




--- 아래는 리틀/빅 엔디안 방식을 사용 하는 시스템들이다 ---


[리틀 엔디안]

    Linux on x86, x64, Alpha and Itanium

    Mac OS X on x86, x64

    OpenVMS on VAX, Alpha and Itanium

    Solaris on x86, x64, PowerPC

    Tru64 UNIX on Alpha

    Windows on x86, x64 and Itanium

[빅 엔디안]

    AIX on POWER

    AmigaOS on PowerPC and 680x0

    HP-UX on Itanium and PA-RISC

    Linux on MIPS, SPARC, PA-RISC, POWER, PowerPC, 680x0, ESA/390, and z/Architecture

    Mac OS on PowerPC and 680x0

    Mac OS X on PowerPC

    MVS and DOS/VSE on ESA/390, and z/VSE and z/OS on z/Architecture

    Solaris on SPARC


저작자표시 비영리 변경금지 (새창열림)
    '0x01 끄적끄적 :)/보안 상식' 카테고리의 다른 글
    • GDB 사용방법
    • 참조모니터(Reference Monitor)
    eli_ez3r
    eli_ez3r

    티스토리툴바