파일에 정보들이 저장되어 있다
실행파일 실행 -> 메모리에 올라간다
데이터뿐만 아니라 온갖 정보들이 올라간다
[변수이름] [크기][초기값]
[크기] db(1) dw(2) dd(4) dq(8)
define byte 8bit(1byte)
define word 16bit(2byte)
define double word 32bit(4byte)
define quad word 64bit(8byte)
section .data
a db 0x11 ;[0x11]
b dw 0x2222
c dd 0x33333333
d dq 0x4444444444444444
제일 앞은 확인할 메모리를 입력하면 Value값이 나오게된다
Type부분에 데이터형태선택(Hex) / 어느단위로 볼거냐(b) / 해당주소기준으로 몇개를 보여줄거냐(12)
선택할수 있다
a의 Value를 보면 a(0x11) 다음에 b(0x2222)가 있고 다음에 c(0x33333333) 다음에 d(0x4444444444444444)가 연속적으로 메모리상에 올라가있는걸 확인할 수 있다.
[변수이름] [크기][개수]
[크기] resb(1) resw(2) resd(4) redq(8)
section .bss
e resb 10
.data
초기화된 데이터라서 파일에 값을 적어놔야 하기 때문에 파일에 .data 공간을 할당해야한다
.bss
초기화 되지 않아서 0이기에 파일에 값을 적어놓을 필요가 없어서 실행파일의 크기가 줄어든다
실제로 메모리에 올라갈때는 각자의 영역에 올라간다.
mov rax, a ; a라는 바구니의 주소값을 rax에 복사
rax의 값을 확인해보면 a라는 값을 가져온게 아니라 a의 주소값을 가지고 온걸 볼수가 있다.
메모리에 1만 더하면 b의 주소가 나오게된다
mov rax, [a] ; a라는 바구니 안에 있는 값을 rax에 복사
범위를 넘어서 가져오는걸 볼 수 있다
범위 넘어서 가져오는거 해결 방법
받는 레지스터의 크기를 줄이면 된다
mov al, [a]
실행전
실행후
1byte만 가져온다
mov [a], byte 0x55
mov [a], word 0x6666
mov [a], cl
실행전
실행후
메모리 범위 침범하는걸 볼 수 있음(초기 : a db 0x11 )
Part1: C++ 프로그래밍 입문
섹션 1.어셈블리 언어 입문
실행파일, 메모리구조
메모리 구조
.data관련