스택, 데이터, 힙, 코드 등 메모리 세그먼트의 시작 주소와 끝 주소를 확인하는 방법은 무엇입니까?

스택, 데이터, 힙, 코드 등 메모리 세그먼트의 시작 주소와 끝 주소를 확인하는 방법은 무엇입니까?

메모리 세그먼트는 Linux 운영 체제의 일부이므로 간단한 C 프로그램이나 Linux 명령을 사용하여 해당 주소를 볼 수 있습니까?

답변1

프로그램을 작성했고 실행 중에 메모리 맵을 보려면 다음과 같은 디버거에서 프로그램을 실행한 다음 실행 gdb하고 명령을 사용하여 메모리 맵을 보면 info proc mappings출력은 다음과 같습니다.

(gdb) info proc mappings
process 6520
Mapped address spaces:

    Start Addr   End Addr       Size     Offset objfile
       0x10000    0x15000     0x5000        0x0 /bin/true
       0x24000    0x25000     0x1000     0x4000 /bin/true
       0x25000    0x26000     0x1000     0x5000 /bin/true
    0x76e6e000 0x76f98000   0x12a000        0x0 /lib/arm-linux-gnueabihf/libc-2.24.so
    ... etc ...
    0x7efdf000 0x7f000000    0x21000        0x0 [stack]
    0xffff0000 0xffff1000     0x1000        0x0 [vectors]

실행 중인 프로세스의 맵을 보려면 올바른 권한이 있다고 가정하면 됩니다 cat /proc/<pid>/maps. 또는 프로세스에 연결하여 gdb -p <pid>위에서 설명한 작업을 수행할 수 있습니다.

관련 정보