sub 명령어
[어셈블리 코드]
main:
mov eax, esp (1)
sub esp, 8 (2)
mov [eax], dword 1 (3)
mov [eax-4], dword 2 (4)
sub [eax-4], dword 1 (5)
[스택 주소]
(시작)
high
bffff0a0 <- esp 처음엔 esp가 최상단 주소를 가리키고 있음.
bffff09c
bffff098
low
(1) mov eax, esp
high
bffff0a0 <- esp
<- eax esp가 가리키는 주소를 eax에도 할당.
bffff09c
bffff098
low
(2) sub esp, 8
high
bffff0a0 <- eax
bffff09c
bffff098 <- esp sub 명령어를 통해 esp가 가리키는 주소를 8만큼 내린다(빼준다).
(즉, 주소 공간을 2개 만큼 아래로 확보한다는 말? 각 주소는 4크기 만큼의 차이가 있다.)
low
(3) mov [eax], dword 1
high
bffff0a0 <- eax
bffff09c
bffff098 <- esp
low
<주소값 출력>
bffff0a0 : 0x00000001 eax가 가리키는 주소에 1 값 할당.
(dword는 4바이트이므로 주소 크기에 맞게 4바이트 만큼 확보하고 1값을 할당한 것.)
(4) mov [eax-4], dword 2
high
bffff0a0 <- eax
bffff09c
bffff098 <- esp
low
<주소값 출력>
bffff09c : 0x00000002 eax가 가리키는 주소(bffff0a0)에 4 만큼 뺀(내려간) 주소(bffff09c)에 2 값 할당.
(dword는 4바이트이므로 주소 크기에 맞게 4바이트 만큼 확보하고 2값을 할당한 것.)
(5) sub [eax-4], dword 1
high
bffff0a0 <- eax
bffff09c
bffff098 <- esp
low
<주소값 출력>
bffff09c : 0x00000001
eax가 가리키는 주소에 4 만큼 뺀(내려간) 주소(bffff09c)의 값(0x00000002)에서 1만큼을 sub
(dword는 4바이트이므로 주소 크기에 맞게 4바이트 만큼 확보하고 1값을 뺸 것.)
add 명령어
[어셈블리 코드]
main:
mov eax, esp (1)
add esp, 8 (2)
mov [eax], dword 1 (3)
mov [eax+4], dword 2 (4)
add [eax+4], dword 1 (5)
[스택 주소]
(시작)
high
bffff0a8
bffff0a4
bffff0a0 <- esp 처음엔 esp가 최상단 주소를 가리키고 있음.
bffff09c
bffff098
low
(1) mov eax, esp
high
bffff0a8
bffff0a4
bffff0a0 <- esp
<- eax esp가 가리키는 주소를 eax에도 할당.
bffff09c
bffff098
low
(2) add esp, 8
high
bffff0a8 <- esp
bffff0a4
bffff0a0 <- eax
bffff09c
bffff098
low
add 명령어를 통해 esp가 가리키는 주소를 8만큼 올린다(더한다).
(즉, 주소 공간을 2개 만큼 위로 확보한다는 말? 각 주소는 4크기 만큼의 차이가 있다.)
(3) mov [eax], dword 1
high
bffff0a8 <- esp
bffff0a4
bffff0a0 <- eax
bffff09c
bffff098
low
<주소값 출력>
bffff0a0 : 0x00000001 eax가 가리키는 주소에 1 값 할당.
(dword는 4바이트이므로 주소 크기에 맞게 4바이트 만큼 확보하고 1값을 할당한 것.)
(4) mov [eax+4], dword 2
high
bffff0a8 <- esp
bffff0a4
bffff0a0 <- eax
bffff09c
bffff098
low
<주소값 출력>
bffff0a4 : 0x00000002 eax가 가리키는 주소(bffff0a0)에 4 만큼 더한(올라간) 주소(bffff0a4)에 2 값 할당.
(dword는 4바이트이므로 주소 크기에 맞게 4바이트 만큼 확보하고 2값을 할당한 것.)
(5) add [eax+4], dword 1
high
bffff0a8 <- esp
bffff0a4
bffff0a0 <- eax
bffff09c
bffff098
low
<주소값 출력>
bffff0a4 : 0x00000001
eax가 가리키는 주소에 4 만큼 더한(올라간) 주소(bffff0a4)의 값(0x00000002)에서 1만큼을 add
(dword는 4바이트이므로 주소 크기에 맞게 4바이트 만큼 확보하고 1값을 더한 것.)
'Reverse Engineering > gdb' 카테고리의 다른 글
gdb) 레지스터 값, 메모리값 확인 명령어 (0) | 2020.11.20 |
---|---|
lea, and, or, xor 명령어 (0) | 2020.10.10 |
gdb - Segmentation Fault, 대괄호 [ ] (0) | 2020.10.07 |
gdb 명령어, 리틀엔디언 방식 (0) | 2020.10.07 |
gdb 실행, 명령어 (0) | 2020.10.07 |
댓글