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이 들어온다
'리버싱 기초' 카테고리의 다른 글
PE 구조 (DOS 헤더) (0) | 2018.11.11 |
---|---|
함수 호출 규약 (0) | 2018.11.03 |
리버싱 기초 4 (어셈블러 명령어) (0) | 2018.10.23 |
리버싱 기초 3 (어셈블러 명령어) (0) | 2018.10.23 |
리버싱 기초 2 (어셈블리어) (0) | 2018.10.20 |