목록전체 글 (18)
Study
Reader-Writer Lock 하나의 데이터에 접근하려는 5개의 Thread가 있다. 위 경우에서 Thread 1, 4가 쓰기 작업을 수행하기 위해 Data에 동시 접근하는 경우 문제가 발생할 수 있다. 혹은 Thread 2가 Data를 읽으려는 순간 Thread 1이 Data의 내용을 변경해버릴 경우 문제가 발생할 수 있다. 그렇기 때문에 공유 자원에 접근하기 위해서는 동기화 처리를 해주어야 한다. 한번에 하나씩만 자원에 접근하도록. 그러나 값을 그저 읽기만 하는 경우에는 동기화 작업이 꼭 필요하지 않다. 오히려 한 Thread만이 접근할 수 있기에 대기시간으로 인해 비효율을 초래할 수 있다. 따라서 rwLock은 Read Lock이 걸린 상태에서 다른 Read Lock이 걸려오면 Read 작업을 ..
7. CodeEngn Basic 07 7.1 문제 풀이 해당 파일에서 사용되는 함수 목록이다. 드라이브 정보를 추출하는 함수로 보이는 부분을 찾았다. BP를 걸고 진행하여 해당 함수로 가보자. 해당 함수를 호출하기 위한 인자들이 스택상에 쌓인 모습이다. 여기서 잠깐 멈추고 MSDN에서 GetVolumeInformationA 함수에 대한 정보를 찾아보자. 첫 번째 인자 lpRootPathName에 대한 설명이다. NULL을 지정하면 현재 경로의 루트 디렉터리가 지정된다. 내 경우, 파일이 존재하는 곳은 바탕화면이므로 루트 디렉터리는 C:\가 된다. 문제를 풀기 위해서는 드라이브 이름을 CodeEngn으로 바꾼 후 시도해야 하는데.. 어.. 그냥 바꾸기 싫었다. 그렇다고 "로컬 디스크"라는 이름으로 관찰하고..
6. CodeEngn Basic 06 Back to user모드를 이용하여 해결할 수 있는 문제이다. 6.1 문제 풀이 디버깅을 시작하면 PUSHAD가 먼저 보인다. POPAD와 짝을 이루어 압축 해제하는 코드의 경계를 나타낸다. [Search for] -> [All Commands]를 이용하여 POPAD를 찾는다. PUSHAD 아래의 POPAD를 더블클릭한다. OEP로 진입하는 JMP문이 있다. 정답의 일부이므로 가렸다. Back to user모드에 진입하기 위해 프로그램을 실행시키고 메시지 박스를 띄운다. ※참고 함수가 진행 중일 때 Back to user모드를 이용하여 함수가 끝나는 시점으로 이동할 수 있다. 메시지 박스가 띄워진 시점의 상태이다. Stack Window 아래에서 Running임을 ..