문자열과 엔디안

변수 선언 (한개 이상의 값)

section .data
    a db 0x11, 0x11, 0x11, 0x11

위 코드 처럼 a에 값 하나가 아닌 연속된 값을 지정 할 수 있다.

문자열 변수

section .data
    msg db 'Hello World', 0x00

위 코드를 메모리상에서 확인해 보면 변수 msg의 값은

0x48,0x65,0x6c,0x6c,0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x0

임을 확인 할 수 있다.

아스키코드 매칭시 Hello World가 되고 마지막 0은 문자열의 끝을 알려주는 값이다.

실제로 코드상

section .data
    msg db 0x48,0x65,0x6c,0x6c,0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x0

로 선언해도 같은 결과임을 확인 할 수 있다.

리틀엔디안

리틀엔디안을 사용하는 시스템에서는 데이터가 반대로 저장된다.

section .data
    b dd 0x12345678

위와 같이 선언된 변수 b는 리틀엔디안 방식의 시스템에서
메모리의 낮은주소부터 확인해보면

0x78, 0x56, 0x34, 0x12

순서로 저장 되어 있는것을 확인할 수 있다.
(1바이트 단위로 끊어서 거꾸로 저장)

반대로 빅엔디안 방식의 시스템에서는

0x12, 0x34, 0x56, 0x78

순서로 저장된다.

이기종 시스템간 데이터 전송시 엔디안 방식의 차이로 데이터가 꼬일 수 있으니 주의가 필요하다.

좋은 웹페이지 즐겨찾기