본문 바로가기

vmmap

(4)
stack overflow 메모리 탐구. stack overflow 가 날 때 실제 메모리 주소를 찍어 보고, 그 값을 vmmap 툴과 비교해 봤다. 재귀함수(recursive fuction)를 배울 때 가장 많이 듣는 유의점이, 재귀함수는 stack overflow 를 유발할 수 있기 때문에 주의하라라는 말이다. 재귀함수를 이용하여 문제를 발생시켰다.재귀함수 내부에 지역변수를 하나 생성하였고, 그 지역변수의 주소를 찍었다. sysinternals 의 vmmap 툴은 프로세스를 선택하면 해당 프로세스의 메모리 공간의 각 부분이 어떤 영역으로 잡히는 지를 보여준다. 우리의 관심사는 stack 이고, stack은 0x00030000 ~ 0x00130000 영역에 잡혀있다. 첫번째 그림에서 찍힌 첫번째 r의 주소는 0x12ff48 스택 중에서도 윗부..
[64Bit] 64비트 시스템에서의 프로세스 가상메모리 어드레스, 시스템 dll 64비트 윈도우 상에서의 32비트 프로세스와 64비트 프로세스를 비교해 봤다. 64비트 윈도우7에서 explorer.exe 는 64비트 프로세스가, wmplayer.exe 는 32비트 프로세스가 돌았다.이 두 프로세스를 시스인터널즈의 vmmap.exe 툴로 잠깐 들여다 봤다. 가장 먼저 눈에 띄는 차이점은 다음과 같다. 1. 32비트 프로세스 wmplayer.exe 다. imm32.dll 등의 시스템 dll들이 windows\sysWOW64 패쓰에 있는 것들이 주루륵 붙어서 돌고 있다. 2. 프로세스의 버추얼 어드레스가 16진수 여덟자리이다. 7FFFFFFF 까지 보이고 있다. 3. 64비트 프로세스인 explorer.exe 를 보면, windows\system32\ 아래의 DLL들이 붙어 있는 걸 확인..
[WINDOWS] 메모리상의 맵파일과 이미지 비교 김성우 해킹, 파괴의 광학 6장 예제 6-3을 조금 변형했다. 소스의 저작권이 좀 아리까리한데, 일반적인 예제코드라 생각하여 저자의 허락없이 변형하여 올렸다. (혹시 저작권자가 이 글을 보고, 문제를 제기한다면 요청대로 처리하겠다.) #include #include int CompareMappedAndAutoLoaded(char *szDllPath) { int i, result; //char szDllPath[] = BYTE *pMapFile, *pDll; DWORD dwSize; DWORD dwSameSize = 1; HANDLE hFile, hFileMap; char c; hFile = CreateFile(szDllPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_..
Private but Shareable 시스인터널즈 툴 중에 재미있는 게 있다. vmmap 이라는 툴로, 특정 프로세스가 사용하는 가상주소공간을 지금 어떤 것이 얼마나 사용되고 있는지를 나타내 주는 툴이다. 색색깔로 예쁘게 서로 다른 의미로 사용되는 것을 다르게 보여줘서 아주 좋다. 이 툴을 가지고 이것저것 살펴보다가 이상한 것을 발견했다. 아래 그림에서 반전시킨 부분이다. 뭐가 이상하다고 하는 거냐면, 다시 위쪽 부분을 보자. 메모리의 종류에는 Private 이라고 노란색으로 표시된 것이 있는데, 이렇게 딱지가 붙은 것은 다른 프로세스와 공유되지 않는 자기 자신만 사용할 수 있는 그야말로 "개인적인", "자기만의" 공간이다. 그런데, 각 메모리 종류에 대해 상세하게 워킹셋(WS)을 구분하여 보여주는 곳에는 Private, Shareable ..