콘텐츠로 바로가기

now0930 일지

이런저런 생각

  • 홈
  • 비공개
  • 강좌
  • 잔여 작업 조회
  • 위치

anonymous memory mapping, p308

https://www.miroch.ru/2017/01/17/linux-process-memory-layout/
proc pid maps

여기를 참조 했다.

#include <stdio.h>
#include <sys/mman.h>

int main(int argc, char *argv[]) {
	char *ptr;
	int ret;

	ptr = (char *) mmap((void *) 0x10000, 512 * 1024, PROT_WRITE|PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
	printf("page size is %0x\n",getpagesize());
	printf("ptr is %p\n",ptr);

	sleep(10);
	/* all done with 'p', so give back the 512 KB mapping */
	ret = munmap (ptr, 512 * 1024);
	if (ret)
		perror ("munmap");
}
pi@raspberrypi:~/Project/cCode/systemProgram $ ./a.out &
[1] 3566
pi@raspberrypi:~/Project/cCode/systemProgram $ page size is 1000
ptr is 0xb6ff0000

pi@raspberrypi:~/Project/cCode/systemProgram $ cat /proc/3566/maps
00010000-00011000 r-xp 00000000 b3:02 386325     /home/pi/Project/cCode/systemProgram/a.out
00020000-00021000 r--p 00000000 b3:02 386325     /home/pi/Project/cCode/systemProgram/a.out
00021000-00022000 rw-p 00001000 b3:02 386325     /home/pi/Project/cCode/systemProgram/a.out
014a8000-014c9000 rw-p 00000000 00:00 0          [heap]
b6e54000-b6f8c000 r-xp 00000000 b3:02 2038       /lib/arm-linux-gnueabihf/libc-2.28.so
b6f8c000-b6f9c000 ---p 00138000 b3:02 2038       /lib/arm-linux-gnueabihf/libc-2.28.so
b6f9c000-b6f9e000 r--p 00138000 b3:02 2038       /lib/arm-linux-gnueabihf/libc-2.28.so
b6f9e000-b6f9f000 rw-p 0013a000 b3:02 2038       /lib/arm-linux-gnueabihf/libc-2.28.so
b6f9f000-b6fa2000 rw-p 00000000 00:00 0 
b6fb1000-b6fb5000 r-xp 00000000 b3:02 12827      /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
b6fb5000-b6fc4000 ---p 00004000 b3:02 12827      /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
b6fc4000-b6fc5000 r--p 00003000 b3:02 12827      /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
b6fc5000-b6fc6000 rw-p 00004000 b3:02 12827      /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
b6fc6000-b6fe6000 r-xp 00000000 b3:02 1963       /lib/arm-linux-gnueabihf/ld-2.28.so
b6ff0000-b6ff6000 rw-p 00000000 00:00 0 
b6ff6000-b6ff7000 r--p 00020000 b3:02 1963       /lib/arm-linux-gnueabihf/ld-2.28.so
b6ff7000-b6ff8000 rw-p 00021000 b3:02 1963       /lib/arm-linux-gnueabihf/ld-2.28.so
bec5d000-bec7e000 rw-p 00000000 00:00 0          [stack]
bef82000-bef83000 r-xp 00000000 00:00 0          [sigpage]
bef83000-bef84000 r--p 00000000 00:00 0          [vvar]
bef84000-bef85000 r-xp 00000000 00:00 0          [vdso]
ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]

0x10000에 메모리를 요청했으나, 불가능하여 0xb6ff0000에 0x2000 byte를 얻었다. 512 KB로 다시 맵핑하여 cat/proc/PID/maps로 확인했다.

메모리 영역 크기, 주소 비교.
  • heap 영역 밖 노란열에 512KB를 할당 받았다.(anonymous memory mapping)
  • a.out이 3KB(1K+1K+1K)메모리를 사용한다. 10,000~11,000까지 한 블럭, 20,000 ~ 21,000까지 한 블록. 나머지 21,000 ~ 22,000는 offset 1K를 주고 사용한다.
  • a.out 파일 크기는 8KB 이다. 나머지는 메모리의 다른 영역에 넣는 듯 하다.
  • libc-2.28.so는 817KB 메모리를 사용한다.(0x138+0x10+0x2+0x1).
  • b5dbd000 ~ d6ef5000에서 0x138KB를 사용하고, 그 다음 주소에 libc-2.28.so 파일 offset 0x138KB만큼 주고 사용한다. 그 뒤로 같은 방식으로 사용한다.
  • 별도 설정을 하지 않을 경우, heap과 stack은 같은 크기를 갖는다??

이 글 공유하기:

  • Tweet
발행일 2020-07-08글쓴이 이대원
카테고리 생활코딩 태그 c, linux, system program

댓글 남기기응답 취소

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.

글 내비게이션

이전 글

경제의 신과 함께 rss 다운로더 v2.

다음 글

signal, page 342

2025 5월
일 월 화 수 목 금 토
 123
45678910
11121314151617
18192021222324
25262728293031
4월    

최신 글

  • common mode, differential mode 2025-05-11
  • signal conditioner, 신호 처리기 2025-05-10
  • strain gage 2025-05-09
  • 칼만 필터 2025-05-01
  • positioner(I/P) 2025-04-26

카테고리

  • 산업계측제어기술사
  • 삶 자국
    • 책과 영화
    • 투자
  • 생활코딩
    • LEGO
    • ROS
    • tensorflow
  • 전기기사
  • 피아노 악보

메타

  • 로그인
  • 엔트리 피드
  • 댓글 피드
  • WordPress.org

페이지

  • 소개
  • 잔여 작업 조회
    • 작업 추가
    • 작업의 사진 조회
    • 작업 수정 페이지
  • 사진
    • GPS 입력된 사진
    • 사진 조회
  • 위치
    • 하기 휴가 방문지
    • 해외 출장

태그

android bash c docker driver FSM gps java kernel LEGO linux mysql network program opcua open62541 plc programmers python raspberry reinforcementLearning ros state space system program tensorflow transfer function 경제 미국 민수 삼국지 세계사 실기 에너지 역사 유전자 일본 임베디드 리눅스 전기기사 조선 중국 채윤 코딩 테스트 통계 한국사 한국어

팔로우하세요

  • Facebook
now0930 일지
WordPress로 제작.
 

댓글 로드중...