공유 메모리 관련 함수
shmget() 함수
shmat() 함수
shmdt() 함수
■ shmget() 함수
NAME
shmget - allocates a shared memory segment
메모리 안에 들어있는 일부내용 조각들을 세그먼트라고 부른다. 그것을 할당한다.
SYNOPSIS
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
DESCRIPTION
shmget() returns the identifier of the shared memory segment associated
to the value of the argument key. A new shared memory segment, with
size equal to the round up of size to a multiple of PAGE_SIZE, is cre-
ated if key has value IPC_PRIVATE or key isn't IPC_PRIVATE, no shared
memory segment is associated to key, and IPC_CREAT is asserted in shm-
flg (i.e. shmflg&IPC_CREAT isn't zero).
The value shmflg is composed of:
IPC_CREAT to create a new segment. If this flag is not used, then
shmget() will find the segment associated with key, check
to see if the user has permission to receive the shmid
associated with the segment, and ensure the segment is not
marked for destruction.
IPC_EXCL used with IPC_CREAT to ensure failure if the segment
exists.
shmget() 함수
-공유 메모리를 생성하거나 공유 메모리를 사용할 수 있는 함수
-> 공유 메모리를 생성하거나 생성된 공유 메모리의 ID 반환
-형식 : int shmget(key_t key, int size, int shmflg);
- key_t key : 공유 메모리를 읽기 위한 key 변수
- int size : 공유 메모리의 크기
- int shmflg : 공유 메모리 생성이나 사용 옵션을 지정
- IPC_CREAT : 공유 메모리 생성
- 0666 : 공유 메모리 사용 권한
■ shmat() 함수/shmdt() 함수
NAME
shmop - shared memory operations
SYNOPSIS
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
할당하면 변환되는 값, 위치, 플라그
int shmdt(const void *shmaddr);
DESCRIPTION
The function shmat attaches the shared memory segment identified by
shmid to the address space of the calling process. The attaching
address is specified by shmaddr with one of the following criteria:
If shmaddr is NULL, the system chooses a suitable (unused) address at
which to attach the segment.
If shmaddr isn't NULL and SHM_RND is asserted in shmflg, the attach
occurs at the address equal to shmaddr rounded down to the nearest mul-
tiple of SHMLBA. Otherwise shmaddr must be a page aligned address at
which the attach occurs.
If SHM_RDONLY is asserted in shmflg, the segment is attached for read-
ing and the process must have read permission for the segment. Other-
wise the segment is attached for read and write and the process must
have read and write permission for the segment. There is no notion of
a write-only shared memory segment.
shmat() 함수
-이미 할당된 공유 메모리 공간을 다른 프로세스에서 사용할 수 있게 권한을 부여하는 함수
-> 생성된 공유 메모리를 프로세스에 연결(Attach)
-형식 : void *shmat(int shmid, const void *shmaddr, int shmflg);
- int shmid : 공유 메모리를 생성할 때 만들어진 공유 메모리 ID
- const void *shmaddr : 공유 메모리가 할당된 주소
- int shmflg : 공유 메모리 사용 옵션을 지정
- SHM_RND : 공유 메모리 주소를 프로세스에 맞게 따로 할당
- SHM_RDONLY : 공유 메모리를 읽기 전용으로 설정
shmdt() 함수
-다른 프로세스에 연결된 공유 메모리 공간의 사용을 끝낸 후 프로세스와 공유 메모리 공간의 연결을 끊는다.
-> 프로세스에 연결된 공유 메모리를 분리(Detach)
-형식 : int shmdt(const void *shmaddr);
- const void *shmaddr : 공유 메모리가 할당된 주소
'Learning > └◆Reversing' 카테고리의 다른 글
[참고] Format String이란 (0) | 2017.01.30 |
---|---|
11_Level11 -> Level12[FTZ] 포맷스트링(Format string directive) 취약점 (0) | 2017.01.30 |
10_Level10 -> Level11[FTZ] 공유 메모리에 데이터를 읽고 쓰기 (0) | 2017.01.29 |
09_Level9 -> Level10[FTZ] 버퍼 오버 플로우 소개 (0) | 2017.01.29 |