这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » linux应用程序堆和栈起始地址问题

共2条 1/1 1 跳转至

linux应用程序堆和栈起始地址问题

高工
2012-11-26 10:27:17     打赏
想知道linux应用程序中堆和栈起始地址是多少,还有大小?? 怎么看应用程序堆和栈的起始地址?? 还有就是一般应用程序返回的地址是虚拟地址还是别的啊??



关键词: linux     应用程序     起始     地址     问题    

高工
2012-12-05 09:38:34     打赏
2楼

通过cat /proc/进程号/maps获得堆栈地址。

005e9000-00603000 r-xp 00000000 fd:00 4228679    /lib/ld-2.5.so
00603000-00604000 r--p 00019000 fd:00 4228679    /lib/ld-2.5.so
00604000-00605000 rw-p 0001a000 fd:00 4228679    /lib/ld-2.5.so
00607000-00747000 r-xp 00000000 fd:00 4228694    /lib/i686/nosegneg/libc-2.5.so
00747000-00749000 r--p 00140000 fd:00 4228694    /lib/i686/nosegneg/libc-2.5.so
00749000-0074a000 rw-p 00142000 fd:00 4228694    /lib/i686/nosegneg/libc-2.5.so
0074a000-0074d000 rw-p 0074a000 00:00 0
00949000-0094a000 r-xp 00949000 00:00 0          [vdso]
08048000-08049000 r-xp 00000000 fd:00 2066890    /home/temp/a.out
08049000-0804a000 rw-p 00000000 fd:00 2066890    /home/temp/a.out
b7ef2000-b7ef3000 rw-p b7ef2000 00:00 0
b7f07000-b7f09000 rw-p b7f07000 00:00 0
bf946000-bf95c000 rw-p bf946000 00:00 0          [stack]

要想获得更具体的信息,可以使用readelf -S 可执行文件名,获得数据放在虚拟内存的什么位置,以及是否可读写等。
 获得如下信息:
There are 28 section headers, starting at offset 0x998:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        08048114 000114 000013 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            08048128 000128 000020 00   A  0   0  4
  [ 3] .gnu.hash         GNU_HASH        08048148 000148 000020 04   A  4   0  4
  [ 4] .dynsym           DYNSYM          08048168 000168 000050 10   A  5   1  4
  [ 5] .dynstr           STRTAB          080481b8 0001b8 00004c 00   A  0   0  1
  [ 6] .gnu.version      VERSYM          08048204 000204 00000a 02   A  4   0  2
  [ 7] .gnu.version_r    VERNEED         08048210 000210 000020 00   A  5   1  4
  [ 8] .rel.dyn          REL             08048230 000230 000008 08   A  4   0  4
  [ 9] .rel.plt          REL             08048238 000238 000018 08   A  4  11  4
  [10] .init             PROGBITS        08048250 000250 000017 00  AX  0   0  4
  [11] .plt              PROGBITS        08048268 000268 000040 04  AX  0   0  4
  [12] .text             PROGBITS        080482b0 0002b0 0002c8 00  AX  0   0 16
  [13] .fini             PROGBITS        08048578 000578 00001c 00  AX  0   0  4
  [14] .rodata           PROGBITS        08048594 000594 000110 00   A  0   0  4
  [15] .eh_frame         PROGBITS        080486a4 0006a4 000004 00   A  0   0  4
  [16] .ctors            PROGBITS        080496a8 0006a8 000008 00  WA  0   0  4
  [17] .dtors            PROGBITS        080496b0 0006b0 000008 00  WA  0   0  4
  [18] .jcr              PROGBITS        080496b8 0006b8 000004 00  WA  0   0  4
  [19] .dynamic          DYNAMIC         080496bc 0006bc 0000c8 08  WA  5   0  4
  [20] .got              PROGBITS        08049784 000784 000004 04  WA  0   0  4
  [21] .got.plt          PROGBITS        08049788 000788 000018 04  WA  0   0  4
  [22] .data             PROGBITS        080497a0 0007a0 000008 00  WA  0   0  4
  [23] .bss              NOBITS          080497a8 0007a8 000008 00  WA  0   0  4
  [24] .comment          PROGBITS        00000000 0007a8 000114 00      0   0  1
  [25] .shstrtab         STRTAB          00000000 0008bc 0000db 00      0   0  1
  [26] .symtab           SYMTAB          00000000 000df8 000460 10     27  48  4
  [27] .strtab           STRTAB          00000000 001258 000266 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]