본문 바로가기
Reverse Engineering/gdb

lea, and, or, xor 명령어

by manchesterandthecity 2020. 10. 10.

lea 명령어와 mov 명령어 비교

[어셈블리어]

global main

section .text 
main: 
        mov     eax, 1 
        mov     ebx, 4 
        mov     ecx, 7 
        lea       eax, [eax+ecx] 
        lea       ebx, [ebx*4] 
        mov     eax, [eax+ecx]

 

 

- 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

댓글