FTZ Level 10
hint는 다음과 같다.
공유 메모리란, 다수의 프로세스에서 동시에 접근 가능한 메모리이다.
C언어에는 이 공유 메모리를 생성하는 함수로 shmget이 있다.
key_t는 공유 메모리를 구별하는 식별 번호이기 때문에 shmget을 이용할 수 있다.
먼저 ipcs 명령어를 통해 시스템에서 사용 중인 공유 메모리 세그먼트를 확인한다.
0x00001d6a라는 key가 있고, 이는 10진수로 변환하면 7530이다. 힌트에서 주어진 key_t와 같기 때문에 접근해야 할 공유 메모리는 0x00001d6a이다.
공유 메모리 접근을 위해 다음과 같은 소스 코드를 작성하고 실행한다.
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
int main() {
int shmid; // 공유 메모리의 id를 저장할 변수 선언
char* shmdata; // char형 포인터 선언
shmid = shmget(7530, 1028, 0666); // key가 7530, 용량이 1028바이트, 권한이 0666인 공유 메모리를 생성
shmdata = shmat(shmid, NULL, 0); // 공유 메모리 세그먼트에 액세스
printf("%s\n", shmdata); // 내용 출력
shmdt(shmdata); // 공유 메모리 분리
return 0;
}
참고로, 이 소스에서 char형 포인터를 선언하는 이유는 shmat 함수가 shmid에 대한 주소를 반환하기 때문에 포인터에 주소를 저장하고 printf 함수에서 %s를 사용해 해당 주소에 있는 문자열을 출력하게 하기 위함이다.
level11의 패스워드가 나왔다.
Author And Source
이 문제에 관하여(FTZ Level 10), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bin3635/FTZ-Level-10저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)