[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Программа, показывающая расположение сегментов текста, данных и стека
Эта программа показывает расположение переменных различных классов
хранения в виртуальном адресном пространстве программы.
2 Описание макроподстановки для печати адресов переменных.
3 Объявление внешних переменных etext, edata и end
4 Инициализация внешней статической переменной. Это тип данных
используется для закрытия доступа к переменным извне данного
файла.
5 Инициализированные и неинициализированные внешние
переменные.
10 Инициализированные и неинициализированные статические
переменные.
11 Инициализированные и неинициализированные локальные
переменные.
13 Печать виртуальных адресов пользователя внутри текстового
сегмента.
16 Печать адресов инициализированных статических и внешних
переменных.
19 Печать адресов неинициализированных статических и внешних
переменных.
22-25 Печать адресов локальных переменных, включая аргументы
командной строки
29 Вызов sub1(), она также печатает адреса переменных.
Файл: tds_loc.c
ВЫЗОВ:
$tds_loc
1 main at 800000f4 and sub1 at 80000246
2 end of text segment at 8000305c
3 s at 80005064
4 b at 80005068
5 d at 8000506c
6 end of initialized data at 800058d0
7 a at 80005b2c
8 c at 800058d0
9 end of uninitialized data at 8000634c
10 m at c00200d4
11 n at c00200d5
12 argc at c00200a4
13 argv at c00200a8
14 argv[0] at c002007c
15 t at 800058d4
16 p at c00200d8
17 v at c0020100
ПРОГРАММА, ПОКАЗЫВАЮЩАЯ РАСПОЛОЖЕНИЕ СЕГМЕНТОВ ТЕКСТА, ДАННЫХ И СТЕКА
1 #include <stdio.h>
2 #define PRADDR(A) printf(#A " at %p\n", &A)
3 extern etext, edata, end;
4 static char s = 'S';
5 int a, b = 1;
6
7 main(int argc, char *argv[])
8 {
9 void sub1(int);
10 static int c, d = 1;
11 char m, n = 'n';
12
13 printf("main at %p and sub1 at %p\n", main, sub1);
14 printf("end of text segment at %p\n", &etext);
15
16 PRADDR(s); PRADDR(b); PRADDR(d);
17 printf("end of initialized data at %p\n", &edata);
18
19 PRADDR(a); PRADDR(c);
20 printf("end of uninitialized data at %p\n", &end);
21
22 PRADDR(m); PRADDR(n);
23 PRADDR(argc); PRADDR(argv);
24 for (b = 0; b <argc; b++)
25 printf("argv[%d] at %p\n", b, &argv[b]);
26 sub1(c);
27 }
28
29 void sub1(int p)
30 {
31 static int t;
32 char v;
33 PRADDR(t); PRADDR(p); PRADDR(v);
34 }