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
반응형
'Reverse engineering > 리버싱 분석 강의 정리' 카테고리의 다른 글
리버싱#1 - add, sub 명령어 배우기! (0) | 2021.03.02 |
---|---|
리버싱#1 - mov 명령어 배우기 (0) | 2021.03.01 |
리버싱#1 - segmentation fault 에러 해결하기! (0) | 2021.03.01 |
리버싱#1 - gdb 명령어 사용하는 방법! (0) | 2021.03.01 |
리버싱#1 NASM(넷와이드 어셈블러) 사용법 (0) | 2021.02.25 |
댓글