티스토리 뷰
int* pptr2 부분이 올바른 표현 방법이다. 포인터를 사용해서 넣을 경우 위와 같은 형식으로 어셈블리어가 구성된다.
*ptr : ptr 변수 내부의 값이 가리키고 있는 값(즉, 변수 c의 값)
ptr : ptr 변수 내부의 값(즉, 변수 c의 주소)
&ptr : ptr 변수의 주소 값
int* pptr1 = *ptr
- mov eax, dword ptr [ptr]
=> 먼저 ptr 이 가리키는 값을 구하려면 일단 ptr 변수 내부의 값부터 알아야 한다. ebp를 기준으로 ptr 변수의 주소를 확인한 후 값을 구한다. - mov ecx, dword ptr [eax]
=> ptr은 포인터이기 때문에 주소 값을 가지고 있다. 그리고 우리가 원하는 값은 주소 내부에 있기 때문에 eax에 저장된 주소를 기준으로 가져온다. - mov dword ptr [pptr1] , ecx
=> 원하는 값을 가져왔기 때문에 이것을 pptr1 변수에 그대로 넣어준다.
int* pptr2 = ptr
- mov eax, dword ptr [ptr]
=> ptr 내부에 있는 값인 변수 c의 주소를 eax에 저장 - mov dword ptr [pptr2], eax
=> eax를 pptr2 변수에 그대로 넣어줌
int* pptr3 = &ptr
- lea eax, [ptr]
=> ptr의 주소 자체를 구하려면 ebp의 주소를 기준으로 ptr의 위치만큼 감소시켜야 하는 번거로움이 있다. 그래서 lea를 통해 ptr의 주소를 구한다, - mov dword ptr [pptr3], eax
=> 지금까지와 같이 pptr3 변수에 그대로 값을 넣어준다.
급하게 정리한 것이라서 그림을 넣으려다가 못 넣어서 조만간 메모리 값이랑 그림까지 함께 넣어야겠다.
'Reversing' 카테고리의 다른 글
[Android] smali 코드 분석 연습 (4) | 2017.08.22 |
---|---|
Windbg 사용법 정리 (0) | 2017.07.16 |
C++ 클래스 멤버 함수 (0) | 2016.07.01 |
구조체 핸드레이 (0) | 2016.04.26 |
LOBYTE, BYTE1, HIBYTE 매크로 (0) | 2016.03.03 |
댓글