반응형
[SASM 사용]
section .data
; 초기화된 데이터
; [변수이름] [크기] [초기값]
; [크기] db(1byte크기)[define byte], dw(2byte)[word], dd(4byte)[double], dq(8byte)[quad]
a db 0x11
b dw 0x2222
c dd 0x33333333
d dq 0x4444444444444444
위와 같은 방식으로 변수를 선언하고 값을 넣을 수 있음
Debug -> Show memory를 누르면 앞에서 선언한 변수를 살펴볼 수 있는데
보기 설정에서 12바이트씩 보이게하면
a변수에서도 b, c, d 의 값을 볼 수 있음
rax에 a를 넣으면
0x11이 들어간게 아니라 0x403010이라는 이상한 값이 들어간걸 볼 수 있음
이 값을 주소값으로 검색을 해보면 a의 값이 나오는걸 확인 할 수 있음
이 주소값에 1을 더하면 a 다음에 만든 b의 값이 나옴
mov rax, a
위 코드는 a의 주소값을 rax에 넣는 코드임을 알 수 있음
그렇다면 a 안의 값을 넣으려면 어떻게 해야할까
mov rax, [a]
이렇게 하면 a안의 값을 rax에 넣을 수 있음
mov [a], [크기] [값]
위의 형식으로 다른 값을 넣을 수도 있는데
a의 크기보다 더 큰 값(0x6666)을 넣으면 바로 옆에있는 메모리공간에 침범해서 저장되는걸 볼 수 있음
; 메모리 <-> 레지스터
;mov rax, a ;a 라는 바구니의 주소값을 rax에 복사
;mov rax, [a] ; a 라는 바구니 안의 값을 rax에 복사 (디폴트 크기는 8byte)
mov al, [a]
mov [a], byte 0x55
mov [a], word 0x6666
mov [a], cl
xor rax, rax
ret
; 변수의 선언 및 사용
; 변수는 그냥 데이터를 저장하는 바구니 [ ]
; - 처음에 바구니를 사용하겠다 선언 [이름과 크기를 지정]
; 메모리에는 구분할 수 있도록 주소(번지수)가 있다
; 초기화된 데이터
; [변수이름] [크기] [초기값]
; [크기] db(1byte크기)[define byte], dw(2byte)[word], dd(4byte)[double], dq(8byte)[quad]
section .data
a db 0x11 ; [0x11]
b dw 0x2222
c dd 0x33333333
d dq 0x4444444444444444
section .bss
; 초기화 되지 않은 데이터
; [변수이름] [크기] [개수]
; [크기] resb(1) resw(2) resd(4) resq(8)
e resb 10
sectrion .bss는 초기화 되지 않은 데이터
즉 초기값을 넣지않은 변수는 bss에 들어간다고 함
반응형
LIST
'어셈블리' 카테고리의 다른 글
어셈블리 사칙연산 (0) | 2022.08.10 |
---|---|
엔디안 (0) | 2022.08.09 |
[어셈블리] 레지스터 기초 (0) | 2022.08.08 |
[어셈블리] Hello World (0) | 2022.08.08 |
SASM 설치 (0) | 2022.08.08 |