IT 그리고 정보보안/Knowledge base

어셈블리어 - LEA 명령어

plummmm 2021. 4. 17. 10:20
반응형

LEA 명령에 대해 알아보겠음.

지정한 주소값을 가져오는 명령어로, 보통 값을 가져와야 하는 경우에 쓰인다.

MOV와는 다르다. 레지스터에 주소값을 저장하고 싶을 때 사용되는 명령어임.

 

예제를 통해 확실한 개념을 알아보겠음.

디어셈블을 위한 소스는 위와 같음.

.data 부분은 데이터 세그먼트를 지정하여 1234값을 저장하는 것이다.

 

push ebp 

mov ebp, esp

sub esp, 4h

:함수의 프롤로그와 스택 한칸을 할당한다.

 

mov dword ptr [ebp-4], 00402000h : [ebp-4] 위치에 0x00402000 값을 저장한다.

여기서 0x00402000은 앞에 데이터 세그먼트에 저장된 1234의 주소값이다.

 

mov eax, dword ptr [ebp-4] : [ebp-4] 위치에 저장된 0x00402000을 eax에 복사한다.

lea ecx, dword ptr [ebp-4] : ebp-4에 저장된 값이 가르키고 있는 스택 공간의 주소값을 ecx에 저장한다.

말이 좀 어려운데.. 위의 lea명령을 포인터로 생각해보면 []안을 *으로 보고 lea명령으로 인해 []값 자체가 &연산된다고 생각하면 된다.

 

mov ebx, [eax] : eax에 저장된 값을 ebx에 복사한다.

mov edx, [ecx] : ecx에 저장된 값을 edx에 복사한다.

 

mov esp, ebp

pop ebp

retn

:함수의 에필로그이다.

 

결과적으로

EAX = 00402000

ECX = 0012FFBC

EDX = 00402000

EBX = 34333231 (리틀 엔디안으로, 1234 아스키값)

 

EDX는 ECX의 값인 0012FFBC를 주소값으로 사용하여, 그 위치에 있는 값을 복사했으므로 00402000

EBX는 EAX의 값인 00402000을 주소값으로 사용하여, 그 위치에 있는 값을 복사했으므로 32333231 (1234)

 

 

참고 도서 : 리버싱 윈도우 - 로드북

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

어셈블리어 - CMP  (0) 2021.04.17
어셈블리어 - MOV와 LEA 차이점  (0) 2021.04.17
어셈블리어 - MOVZX 명령어  (0) 2021.04.17
어셈블리어 - MOV 명령어  (0) 2021.04.17
어셈블리어 개요  (0) 2021.04.17