본문으로 바로가기

[C] mmap함수

category ETC 2019. 9. 29. 16:34

mmap() 함수

헷갈려서 정리해본다.

#include <sys/mman.h>

void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

return : 매핑이 시작하는 실제 메모리 주소, 실패할 경우 -1

parameter

  • void *addr : 매핑을 시작할 주소

  • size_t len : 매핑시킬 메모리 길이

  • int prot : 매핑시킨 메모리에 적용시킬 메모리 보호정책

    • rwx 권한을 설정해서 줄 수 있다.

  • int fd : 이 fd를 기준으로 mmap()한다.

  • off_t offset : 매핑할 때 size_t len의 시작점을 지정함

int prot인자는 아래와 같당.

#define PROT_READ   0x04    /* pages can be read */
#define PROT_WRITE 0x02 /* pages can be written */
#define PROT_EXEC 0x01 /* pages can be executed */

pwnable!

static linked binary 일 경우에는 가젯들을 잘 찾아서 mmap으로 실행권한이 있는 공간을 할당 한 후에 그곳에 memcpy()함수로 쉘코드를 복사 시킨 후 쉘코드를 실행시킬 수 있당!

mprotect()를 활용한 ROP와 비슷한 느낌!

'ETC' 카테고리의 다른 글

[ETC] STRIDE Threat modeling 위협 모델링  (0) 2020.02.03
[Web] server-client간의 CGI 통신  (0) 2019.09.26