흑... 또..
윈도우 아키텍쳐에 대한 공부하다가...
여러가지로 재미난 상상이 되어,
해킹에 대한 공부를 하고 있지만...
그렇다... 디자인 패턴도 공부 해야한다.
디자인 패턴 뿐인가?
쌓이고 쌓였다. 하하하


알기쉬운 디자인 패턴..

by 호랭 | 2004/05/10 14:10 | 트랙백 | 덧글(5)
윈도우에서의 DLL 관리
하위 2G 의 유져 영역에 로드되는 DLL 의 관리는 어떤식으로 이루어지는가?

답이 있는 곳은 알았다.

PTE 와 PDE 구조체였던가? 를 이용해서 관리를 한다.

어떻게 관리를 하는 것일까?

궁금하지 않을 수 없다.

유져 영역인데 말이다.

프로세스에서 이것 저것 메모리를 쓸테고,

DLL 이 로드된 주소에 엑세스 하려 한다면, 어떻게 하는가 하는 문제도 있고

(DLL 재배치는 자원소비가 심한데 말이다.)

왜 MS 는 DLL을 유져영역에 로드 되도록 만든 것일까?

궁금하다 궁금해... 답을 보기 전에 내가 방법을 찾아보자.
by 호랭 | 2004/04/23 09:53 | 트랙백
DLL 이 공유되는 방법
DLL은 공유되어지는 모듈이다.

그런데

void* pFunc;
HINSTANCE hInst;

hInst = LoadLibrary("C:\WINNT\system32\WSock32.dll");
pFunc = GetProcAddress(hInst, "recv");

이런 식으로 해서 DLL을 로드하고 pFunc 값을 보면은
0x74fc1073 값이 나오는데,

이는 4G 의 가상 메모리에서 하위 2G 영역인 유져영역의 주소이다.

각 프로세스의 유져영역에 로딩되었는데,

어떻게 공유해서 사용될 수 있는 것일까?

DLL에 대한 참조횟수라든지... Copy on write 라든지... 이런 관리가 유저영역에 로딩되었는데 가능한가???
by 호랭 | 2004/04/23 09:52 | 호영이 연구소 | 트랙백
에잇
에잇! 화딱지 나는구먼 -_-

책을 재미나게 보고 있었다.
대충 아는 부분이라서 휙휙 지나가고 있는데,
예제가 하나 있다.

GetWindowLong 과 SetWindowLong 을 이용해서
Message 를 Hook 하는 것을 보여주고 있는데,

뭐냐 -_-
왜 이런 예문을 실어놓은 것인지 이해가 안된다.
예제에는 이해할 수 없는 코드 (아마도 책이 잘못된듯)도 있다.
return (*lpfnWndProc)(hwnd, message, wParam, lParam);
lpfnWndProc 는 변수인데
형변환을... 당연히 에러나지!

이것 때문에, 이리저리 상상만 하다가 삽질한 기분이다.

아~~~ 갑갑해~~~!!!

도저히 다음 페이지가 머리에 안 들어와서

웹서핑 하며 마음 가라앉히는 중... -.-;

by 호랭 | 2004/04/14 15:39 | 트랙백 | 덧글(2)
DLL의 기본 주소 지정에 대한 의문
좋다.
DLL의 기본 주소를 지정할 수 있다.
이렇게 함으로서 DLL이 로드된 메모리에 다른 DLL이 로딩되어야 해서
DLL이 재배치 되고,
이것은 상당히 큰 속도의 저하원인이 될 수 있다.

하지만,
만일 0x60000000 에다가 sample.dll 을 로드 한다고 값을 주었을 때에,
각 컴퓨터 마다 0x60000000 의 값이 사용되고 있을지 없을지는 미지수인데,
어떻게 이렇게 설정하는 것을 효율적일 수 있는지?
0x60000000 는 해당 프로세스에 할당된 4G 의 가상 메모리 영역인가?
그렇다면 OK
음... 아마도 프로세스에 설정된 4G의 가상 메모리 영역이겠구나...
란 생각이 많이 든다.

아니다! 그렇치 않다. DLL은 공용 모듈이기 때문에,
커널 영역에 로드 되어 다른 프로세스들과 같이 이용될 것이다. -_-
뭐냐 @.@

(WDBG 혹은 WinDBG를 이용해 확인이 가능할 것이다.)

by 호랭 | 2004/04/08 01:06 | 호영이 연구소 | 트랙백 | 덧글(1)
<< 이전 다음 >>