Сегодня изучала Си и потрогала память :)
Написала такой код:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h>
void inspect_stack(void) { char stack_buf[16]; memset(stack_buf, ‘A’, sizeof(stack_buf));
char *heap_buf1 = malloc(24);
char *heap_buf2 = malloc(24);
strcpy(heap_buf1, "HELLO_HEAP_1");
strcpy(heap_buf2, "HELLO_HEAP_2");
printf("[*] PID процесса %d\n", getpid());
printf("[*] Адресс буфера в стеке: %p\n", (void*)stack_buf);
printf("[*] адресс heap_buf1: %p\n", (void*)heap_buf1);
printf("[*] Адрес head_buf2: %p\n", (void *)heap_buf2);
printf("нажмите ентер чтобы завершить....\n");
getchar();
free(heap_buf1);
heap_buf1 = NULL;
free(heap_buf2);
heap_buf2 = NULL;
}
int main(void) { inspect_stack(); return 0; }
Запустила так:
gcc -g -O0 touch_mem.c -o touch_mem
Вывелося полотно:
❯ cat /proc/$(pgrep touch_mem)/maps
557aaad7d000-557aaad7e000 r–p 00000000 fd:00 23199813 /home/nana/Документы/touch_mem
557aaad7e000-557aaad7f000 r-xp 00001000 fd:00 23199813 /home/nana/Документы/touch_mem
557aaad7f000-557aaad80000 r–p 00002000 fd:00 23199813 /home/nana/Документы/touch_mem
557aaad80000-557aaad81000 r–p 00002000 fd:00 23199813 /home/nana/Документы/touch_mem
557aaad81000-557aaad82000 rw-p 00003000 fd:00 23199813 /home/nana/Документы/touch_mem
557aca259000-557aca27a000 rw-p 00000000 00:00 0 [heap]
7f2e3c400000-7f2e3c424000 r–p 00000000 fd:00 27790337 /usr/lib/libc.so.6
7f2e3c424000-7f2e3c59f000 r-xp 00024000 fd:00 27790337 /usr/lib/libc.so.6
7f2e3c59f000-7f2e3c615000 r–p 0019f000 fd:00 27790337 /usr/lib/libc.so.6
7f2e3c615000-7f2e3c619000 r–p 00214000 fd:00 27790337 /usr/lib/libc.so.6
7f2e3c619000-7f2e3c61b000 rw-p 00218000 fd:00 27790337 /usr/lib/libc.so.6
7f2e3c61b000-7f2e3c623000 rw-p 00000000 00:00 0
7f2e3c6a1000-7f2e3c6a6000 rw-p 00000000 00:00 0
7f2e3c6a6000-7f2e3c6e5000 r–p 00000000 fd:00 27264173 /etc/ld.so.cache
7f2e3c6e5000-7f2e3c6e9000 r–p 00000000 00:00 0 [vvar]
7f2e3c6e9000-7f2e3c6eb000 r–p 00000000 00:00 0 [vvar_vclock]
7f2e3c6eb000-7f2e3c6ed000 r-xp 00000000 00:00 0 [vdso]
7f2e3c6ed000-7f2e3c6ee000 r–p 00000000 fd:00 27790327 /usr/lib/ld-linux-x86-64.so.2
7f2e3c6ee000-7f2e3c71b000 r-xp 00001000 fd:00 27790327 /usr/lib/ld-linux-x86-64.so.2
7f2e3c71b000-7f2e3c72a000 r–p 0002e000 fd:00 27790327 /usr/lib/ld-linux-x86-64.so.2
7f2e3c72a000-7f2e3c72c000 r–p 0003d000 fd:00 27790327 /usr/lib/ld-linux-x86-64.so.2
7f2e3c72c000-7f2e3c72d000 rw-p 0003f000 fd:00 27790327 /usr/lib/ld-linux-x86-64.so.2
7f2e3c72d000-7f2e3c72e000 rw-p 00000000 00:00 0
7ffca205d000-7ffca2082000 rw-p 00000000 00:00 0 [stack]
ffffffffff600000-ffffffffff601000 –xp 00000000 00:00 0 [vsyscall]