본문 바로가기
Reverse engineering/리버싱 분석 강의 정리

리버싱#1 - lea 명령어! mov 명령어와 차이는?

by grey-hat hacker 2021. 3. 2.
728x90

• LEA: 복사 (Load Effective Address - 유효 주소 로드)

 > 출발지는 r/m32

 > 목적지는 레지스터

 > 레지스터 연산 결과를 레지스터에 저장(not 포인터)

 

• MOV와 무엇이 다른가?!

  > MOV는 값을 로드하고 - mov eax, [ebp+esp+4] -> 값을 넣는다면 

  > LEA는 유효 주소를 로드한다 - lea eax, [ebp+esp+4] -> 주소를 넣는다!

 

배우고자 하는 lea에 breakpoint를 걸어서!

    [1 + 7*1] 괄호의 식 근데 원래 코드를 보면 *1 해당 값은 없었다!

자동으로 *1을 붙여 주었다! *0도 자동으로 붙었다! -> 의미없는 값이니 무시!

 

그럼 eax 에는 8이 들어가야 한다! 

 

식과 같이 하나씩 변경되는 것을 알 수 있다!! 16의 16진수는 0x10

 

근데 여기서 mov eax, [eax+ecx] 를 수행하면 Segmentation fault 에러가 발생한다.

 

이유는 mov eax, [8] -> 8번째의 값을 eax에 넣으라는 건데 확인해보면 

메모리에 아무것도 없음을 알 수 있다! 그래서 lea 는 연산의 값을 넣으면 되지만 

mov 는 그 곳의 메모리 값을 넣는 것이어서 에러가 나는 것이다!

 

이것이 mov와 lea의 차이!

 

728x90
반응형

댓글