반응형
WinDBG 포인터 참조하기
70634b48이라는 메모리 주소에 6e26a330이라는 값이 담겨있습니다.
call dword ptr [eax+0Ch] 처럼 어셈블리 명령어에서는 내부의 값을 참조한다는 의미로 [] 대괄호가 사용됩니다.
하지만 이를 그대로 메모리창 (Alt+5)에서 확인하려고 똑같이 대괄호를 쓰면 원하는 값이 나오지 않습니다.
어셈블리 명령어 그대로 [eax+0ch]를 입력해보겠습니다.
그림에서 보듯이 eax+0ch 와 [eax+0ch] 출력 시 값이 같게 나옵니다. 메모리창에서도 마찬가지구요.
어셈블리에서 쓰이는 값참조의 의미가 아닌 수식을 위한 괄호로 인식하기 때문입니다.
보다 정확하게 보자면 덧셈과 곱셈 연산에 괄호유무에 따라 값이 바뀌는 걸 확인할 수 있습니다.
어셈블리 명령어의 대괄호를 메모리창에서는 어떻게 사용해야할까요?
주소 안의 값을 참조하려면 poi() 함수를 사용하면 됩니다.
c언어 포인터에서 *(변수) 이렇게 값을 참조했던 것을 떠올려봅시다.
※ 트레이싱 하다가 [ [[[edi+10h]+4]+esi*4] + 2ch ]와 같이 복잡한 참조를 해야할 때, 일일이 값을 바꿔넣지 말고 poi() 함수를 사용합시다.
반응형
'취약점 분석 > windbg' 카테고리의 다른 글
Mutex 뮤텍스 API 함수 정리 (0) | 2019.02.23 |
---|---|
(임계영역) CriticalSection API 함수 정리 (0) | 2019.02.23 |
Trace 명령어 (0) | 2018.09.03 |
Windbg LFH 동작시킨 상태로 디버깅하는 방법 (0) | 2018.07.19 |
힙 디버깅 (0) | 2018.05.09 |