lea 명령어와 mov 명령어 비교
[어셈블리어]
global main |
- lea 명령어는 [ ] 대괄호 안의 값(여기서는 연산값)을 상수값으로 레지스터로 그대로 전달한다.
lea eax, [eax+ecx] 결과.
<eax 값 출력>
(16진수) (10진수)
info reg $eax : 0x8 8 |
lea ebx, [ebx*4] 결과.
<ebx 값 출력>
(16진수) (10진수)
info reg $ebx : 0x10 16 |
- mov 명령어는 [ ] 대괄호 안의 값(여기서는 연산값)을 주소값으로 보고 그 주소값에 있는 값을 레지스터로 전달한다.
mov eax, [eax+ecx] 결과.
<ecx 값 출력>
info reg $ecx : |
[ ] 대괄호 안의 값은 eax+ecx 즉, 8+7 = 15 16진수로 F다.
이를 주소형식으로 표현하면 0x0000000F 가 되는데
이 0x0000000F 주소값에 있는 값을 레지스터(ecx)로 전달하게 된다는 말이다.
하지만, 이 주소는 의미없는 주소이고 접근할 수 없는 주소다. 그래서 값이 제대로 출력되지 않는다.
and, or, xor 명령어
[어셈블리어]
global main section .text main: mov eax, 0x33 mov ebx, 0x55 mov ecx, 0x42 and eax, ebx or eax, ecx xor eax, 0xac |
(16진수) (2진수)
0x33 00110011
0x55 01010101
0x42 01000010
0xac 10101100
and eax, ebx 결과.
<eax 값 출력>
(16진수) (10진수)
info reg $eax : 0x11 17 |
00110011 (eax)
& 01010101 (ebx)
00010001 -> 17 (10진수) 0x11 (16진수)
or eax, ecx 결과.
<eax 값 출력>
(16진수) (10진수)
info reg $eax : 0x53 83 |
00010001 (eax)
| 01000010 (ecx)
01010011 -> 83 (10진수) 0x53 (16진수)
xor eax, 0xac 결과.
<eax 값 출력>
(16진수) (10진수)
info reg $eax : 0xff 255 |
01010011 (eax)
^ 10101100 (0xac)
11111111 -> 255 (10진수) 0xff (16진수)
'Reverse Engineering > gdb' 카테고리의 다른 글
gdb) 레지스터 값, 메모리값 확인 명령어 (0) | 2020.11.20 |
---|---|
sub, add 명령어 (0) | 2020.10.10 |
gdb - Segmentation Fault, 대괄호 [ ] (0) | 2020.10.07 |
gdb 명령어, 리틀엔디언 방식 (0) | 2020.10.07 |
gdb 실행, 명령어 (0) | 2020.10.07 |
댓글