Self-Improvement
[MOV] VS [LEA] 차이점 본문
*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에 저장한다.
'리버싱 기초' 카테고리의 다른 글
x64dbg 사용법 및 리버싱 기초 (CASE 구문, For문) (0) | 2020.04.29 |
---|---|
x64dbg 사용법 및 리버싱 기초 분석 정리 ( x64dbg, 전역변수, 지역변수, 함수호출, 비교문) (0) | 2020.04.29 |
Protostar-stack1 풀이 (0) | 2018.12.19 |
Protostar-stack0 풀이 (0) | 2018.12.19 |
PE 구조 (섹션 헤더) (0) | 2018.11.11 |