티스토리 뷰

HackerSchool FTZ WARGAME Solution

 

Start : 15.07.03

 

LEVEL10

 

[그림 1]

 

level10의 hint 를 확인 해 보면 공유 메모리에 두 사람이 대화한 내용이 기록되어 있는 것을 확인 할 수 있다.

 

우선 공유 메모리에 대해서 알아야 하는데 공유 메모리란 기존 프로세스가 독립된 메모리 공간을 할당 받고 다른 프로세스의 메모리 공간은 접근이 불가능 한데 반해 메모리 공간을 여러 프로세스가 함께 접근해서 데이터를 공유할 수 있는 공간을 말한다.

 

sys/ipc.h 와 sys/shm.h 두 개의 헤더 파일이 필요하며 shmget() 함수는 임의의 key를 인자로 전달하면 해당 key 값에 대해 공유 메모리를 만들게 된다. 정상적으로 할당이 되면 공유 메모리에 대한 식별자 id 를 리턴하게 되며, shmat() 함수는 식별자 id 를 이용해서 공유 메모리를 프로세스와 연결하는 역할을 하는데 정상적으로 동작이 완료 되면 해당 메모리 공간의 주소값이 반환된다. 이를 활용해 주어진 hint 의 key 값으로 코딩을 하면 문제를 풀 수 있다.

 

[그림 2]

 

[그림 2]와 같이 코딩을 하면 7530 key 에 해당하는 공유 메모리 공간에 있는 내용을 출력할 수 있다.

 

shmget 함수의 IPC_CREAT 는 존재하지 않는다면 전달 받은 key 값으로 공유 메모리 공간을 size 만큼 생성하고 id를 리턴하며 존재한다면 에러 없이 해당 key 값에 해당하는 id 를 리턴한다. 존재 하는 경우에는 size를 0으로 전달하면 된다. shmat() 으로 전달받은 공유 메모리의 주소값으로 for 문을 이용해 한 문자씩 출력하게 되면 공유 메모리에 있는 전체 문자열이 출력이 된다.

 

 

 

[그림 3]

 

코딩한 것을 컴파일 하고 실행시키면 [그림 3]과 같이 메모리의 내용이 출력된다. 깨지는 것은 putty의 인코딩 설정 문제로 인해 한글이 깨져서 나온 것이다.

신고
댓글
댓글쓰기 폼