Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.57 KB | None | 0 0
  1. /* mem.c -- this program reports the virtual address of a variety
  2. of entities in the program:
  3. 1. function address (text/code segment)
  4. 2. global variable address (data segment)
  5. - initialized data
  6. - uninitialized data
  7. 3. local variable address (stack segment)
  8. - function parameters
  9. - local variables declared inside functions
  10. */
  11.  
  12. #include <unistd.h>
  13.  
  14. struct address{ //variable-address pair structure
  15. char strVar[100];
  16. unsigned int address;
  17. };
  18.  
  19. struct address adrs[50]; //array of our address
  20. int cntr = 0;
  21.  
  22. int a, b = 3, c, d = 1; /* global variables */
  23.  
  24. int main() {
  25. /* local variables and function
  26. prototypes */
  27.  
  28.  
  29. int e, f = 2, g(int), *h, *h1, *h2, *h3, i, j = 4, k(char);
  30. double d1, d2, d3;
  31. char c1, c2, c3;
  32. char *s1 = "String literal 1";
  33. char *s2 = "String literal 2";
  34.  
  35. extern end, edata, etext;
  36.  
  37. /* dynamically allocate some storage */
  38. h = (int *)malloc(40);
  39. h1 = (int *)malloc(40);
  40. h2 = (int *)malloc(40);
  41. h3 = (int *)malloc(40);
  42.  
  43. strcpy(adrs[0].strVar, "------Program text ends just before------ %u\n");
  44. adrs[0].address = (int)&etext;
  45. //printf(adrs[0].strVar, adrs[0].address);
  46.  
  47. strcpy(adrs[1].strVar, "------Initialized data region ends just before------ %u\n");
  48. adrs[1].address = (int)&edata;
  49. //printf(adrs[0].strVar, adrs[0].address);
  50.  
  51. strcpy(adrs[2].strVar, "------Uninitialized data region ends just before------ %u\n");
  52. adrs[2].address = (int)&end;
  53.  
  54. strcpy(adrs[3].strVar, "------Break between data and stack regions------ %u\n");
  55. adrs[3].address = (int)sbrk(0);
  56.  
  57. strcpy(adrs[4].strVar, "Address of function main is %u\n");
  58. adrs[4].address = (int)&main;
  59.  
  60. strcpy(adrs[5].strVar, "Address of a is %u\n");
  61. adrs[5].address = (int)&a;
  62.  
  63. strcpy(adrs[6].strVar, "Address of b is %u\n");
  64. adrs[6].address = (int)&b;
  65.  
  66. strcpy(adrs[7].strVar, "Address of c is %u\n");
  67. adrs[7].address = (int)&c;
  68.  
  69. strcpy(adrs[8].strVar, "Address of d is %u\n");
  70. adrs[8].address = (int)&d;
  71.  
  72. strcpy(adrs[9].strVar, "Address of e is %u\n");
  73. adrs[9].address = (int)&e;
  74.  
  75. strcpy(adrs[10].strVar, "Address of f is %u\n");
  76. adrs[10].address = (int)&f;
  77.  
  78. strcpy(adrs[11].strVar, "Address of function g is %u\n");
  79. adrs[11].address = (int)&h;
  80.  
  81. strcpy(adrs[12].strVar, "Address of function h is %u\n");
  82. adrs[12].address = (int)&h1;
  83.  
  84. strcpy(adrs[13].strVar, "Address of function h1 is %u\n");
  85. adrs[13].address = (int)&h2;
  86.  
  87. strcpy(adrs[14].strVar, "Address of function h2 is %u\n");
  88. adrs[14].address = (int)&h3;
  89.  
  90. strcpy(adrs[15].strVar, "Address h is pointing to is %u\n");
  91. adrs[15].address = (int)h;
  92.  
  93. strcpy(adrs[16].strVar, "Address h1 is pointing to is %u\n");
  94. adrs[16].address = (int)h1;
  95.  
  96. strcpy(adrs[17].strVar, "Address h2 is pointing to is %u\n");
  97. adrs[17].address = (int)h2;
  98.  
  99. strcpy(adrs[18].strVar, "Address h3 is pointing to is %u\n");
  100. adrs[18].address = (int)h3;
  101.  
  102. strcpy(adrs[19].strVar, "Address of i is %u\n");
  103. adrs[19].address = (int)&i;
  104.  
  105. strcpy(adrs[20].strVar, "Address of j is %u\n");
  106. adrs[20].address = (int)&j;
  107.  
  108. strcpy(adrs[21].strVar, "Address of function k is %u\n");
  109. adrs[21].address = (int)k;
  110.  
  111. strcpy(adrs[22].strVar, "Address of double d1 is %u\n");
  112. adrs[22].address = (int)&d1;
  113.  
  114. strcpy(adrs[23].strVar, "Address of double d2 is %u\n");
  115. adrs[23].address = (int)&d2;
  116.  
  117. strcpy(adrs[24].strVar, "Address of double d3 is %u\n");
  118. adrs[24].address = (int)&d3;
  119.  
  120. strcpy(adrs[25].strVar, "Address of char c1 is %u\n");
  121. adrs[25].address = (int)&c1;
  122.  
  123. strcpy(adrs[26].strVar, "Address of char c2 is %u\n");
  124. adrs[26].address = (int)&c2;
  125.  
  126. strcpy(adrs[27].strVar, "Address of char c3 is %u\n");
  127. adrs[27].address = (int)&c3;
  128.  
  129. cntr = 27;
  130. g(d);
  131. k(d);
  132.  
  133. /* Sort array in ascending order by account number */
  134. int x, y = 0;
  135. for (y = 0; y <= cntr; y++)
  136. {
  137. for (x = 0; x <= cntr; x++)
  138. {
  139. if (adrs[x].address > adrs[x + 1].address)
  140. {
  141. struct address temp = adrs[x];
  142. adrs[x] = adrs[x + 1];
  143. adrs[x + 1] = temp;
  144. }
  145. }
  146. }
  147.  
  148. printf("Memory map: Memory Address:\n");
  149. printf("---------------------------------- 0\n");
  150. for(cntr = 0; cntr < 49; cntr++){
  151. //printf("cntr is %d", cntr);
  152. printf(adrs[cntr].strVar, adrs[cntr].address);
  153. }
  154. /*
  155. printf("Program text ends just before %u\n", &etext);
  156. printf("Initialized data region ends just before %u\n", &edata);
  157. printf("Uninitialized data region ends just before %u\n", &end);
  158. printf("Break between data and stack regions is %u\n", sbrk(0));
  159.  
  160. printf("address of function main is %u\n", main);
  161. printf("address of a is %u\n", &a);
  162. printf("address of b is %u\n", &b);
  163. printf("address of c is %u\n", &c);
  164. printf("address of d is %u\n", &d);
  165. printf("address of e is %u\n", &e);
  166. printf("address of f is %u\n", &f);
  167. printf("address of function g is %u\n", g);
  168. printf("address of h is %u\n", &h);
  169. printf("address of h1 is %u\n", &h1);
  170. printf("address of h2 is %u\n", &h2);
  171. printf("address of h3 is %u\n", &h3);
  172.  
  173. printf("address h is pointing to is %u\n", h);
  174. printf("address h1 is pointing to is %u\n", h1);
  175. printf("address h2 is pointing to is %u\n", h2);
  176. printf("address h3 is pointing to is %u\n", h3);
  177.  
  178. printf("address of i is %u\n", &i);
  179. printf("address of j is %u\n", &j);
  180. printf("address of function k is %u\n", k);
  181. printf("address of double d1 is %u\n",&d1);
  182. printf("address of double d2 is %u\n",&d2);
  183. printf("address of double d3 is %u\n",&d3);
  184. printf("address of char c1 is %u\n",&c1);
  185. printf("address of char c2 is %u\n",&c2);
  186. printf("address of char c3 is %u\n",&c3);*/
  187.  
  188.  
  189.  
  190.  
  191.  
  192. }
  193.  
  194. int g(int l) { /* 'l' is a parameter */
  195.  
  196. int m; /* 'm' is a local variable */
  197. strcpy(adrs[++cntr].strVar, "Address of l is %u\n");
  198. adrs[cntr].address = (int)&l;
  199. strcpy(adrs[++cntr].strVar, "Address of m is %u\n");
  200. adrs[cntr].address = (int)&m;
  201. }
  202.  
  203. int k(char n) { /* 'n' is a parameter */
  204.  
  205. double o; /* 'o' is a local variable */
  206.  
  207. strcpy(adrs[++cntr].strVar, "Address of n is %u\n");
  208. adrs[cntr].address = (int)&n;
  209. strcpy(adrs[++cntr].strVar, "Address of o is %u\n");
  210. adrs[cntr].address = (int)&o;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement