안녕하세요
메모장을 OllyDbg를 통해서 디버깅을 시도하고 있습니다.
파일 저장/읽기 에 대한 함수 호출을 보려고 하는데
파일 저장은 간단하게 WriteFileW를 한번 호출하지만,
파일 열기같은 경우에는 당연히 ReadFile이겠구나 했는데
이 함수가 생각보다 굉장히 많은 부분에서 호출이 되더랍니다.
뭐 파일열기 다이얼로그를 열고, 파일들의 리스트를 가져오고 등 등...
더구나 메모장에 Drag&Drop를 통해서 파일을 열었을대에는
ReadFile이 아예 호출되지도 않더라구요....
그래서 찾아낸 것이 kernel32.dll 의 CreateFile !!
세번째전달인자 = FILE_SHARE_READ | FILE_SHARE_WRITE
여섯번째전달인자 = FILE_ATTRIBUTE_NORMAL
일곱번째전달인자 = NULL
일 때에는 파일을 열때더군요....
드래그&드랍을 통해서는 ReadFile조차 호출이 되지 않는...
파일을 열때에 파일의 내용이 메모리로 올라오는 경우는 대체 언제쯤일까요...
디버깅을 해보니...
'파일 다이얼로그'가 열리는 순간 각 사용자 디렉토리의 desktop.ini 파일을 open() read() 합니다.
'파일 다이얼로그'의 파일이나 디렉토리를 클릭(클릭 온) 하는 순간 그 파일을 open() read() 하네요.
즉, 드래그&드랍시 CreateFile()과 ReadFile() 브레이크 포인트에 안걸리는 이유는
해당 윈도우 탐색기(메모장과는 다른 프로세스 겠죠)에서 이미 open() read() 한 상태이기 때문입니다.
이 시점에서 이미 내용들이 메모리에 올라가 있는거죠.
파일 인스턴스는 커널메모리에 저장되므로 다른 프로세스끼리 공유가 될것이고
다만 메모장이 어떤 함수를 이용해 탐색기 쪽 가상메모리에 있는 파일 내용을 가져오는지는 모르겠습니다.
(저도 잘 몰라요 ㅋ)