Self-Improvement

[MOV] VS [LEA] 차이점 본문

리버싱 기초

[MOV] VS [LEA] 차이점

JoGeun 2020. 4. 28. 14:45

*MOV

옵코드 MOV는 단지 값을 넣는 역할을 한다. 예를 들면 MOV eax, 1은 eax에 1을 넣는 코드가 되고, MOV ebx, ecx는 ebx에 ecx를 넣는 코드가 된다.

 

*LEA

LEA는 MOV와 다르게 단순하다. MOV는 값을 가져오는 것이라면 LEA는 주소를 가져온다. 따라서 LEA는 가져올 src 오퍼랜드가 주소라는 의미로 대부분 []로 둘러싸여 있다.

 

*예시

esi : 0x401000

*esi : 5640ec83

esp+8 : 0x13ff40

*(esp+8) : 33

 

1. lea eax, dword ptr ds:[esi]

= esi가 0x401000이므로 eax에는 0x401000이 들어온다.

 

2. mov eax, dword ptr ds:[esi]

= esi가 0x401000이므로 eax에는 0x40100 번저기 가리키는 5640ec83이라는 값이 들어온다.

 

3. lea eax, dowrd ptr ss:[esp+8]

= esp+8은 스택이며, eax에는 0x13ff40라는 값이 들어온다.

 

4. mov eax, dword ptr ss:[esp+8]

= esp+8은 스택이며, eax에는 0x13ff40이 가리키코 있는 값인 33이 들어온다

 

 

예시 (Intel)

mov esi, dword ptr ss:[ebp+8]

스택(ss) 영역의 EBP+8 주소의 4바이트 값을 ESI에 저장

 

EBP의 주소는 0019FF68이며 +8 주소는 0019FF70이며 값은 00402094가 ESI에 저장된다.

 


lea eax, dwork ptr ss:[ebp-c]

스택(ss) 영역의 EBP-C 주소 4바이트를 eax에 저장

EBP의 주소는 0019FF68이며 -C 주소는 0019FF5C이다 이 값 "0019FF5C"을 EAX에 저장한다.