2011-02-03 128 views
0

如何检查我的内存堆栈,堆栈等的哪些部分存在?我目前正在用C语言查看一个程序,并查看.elf文件,我可以看到该程序正在使用哪些内存地址,但我不知道它是堆栈还是堆栈。C中的内存分配

+0

您准确使用哪个平台? – 2011-02-03 13:50:54

回答

3

这很难从编译代码本身的静态分析中得知。您应该能够看到任何静态初始化数据区域以及静态未初始化(BSS)部分,但是确切地说,如何将这些部分与堆栈,堆等加载到平台的可执行加载器中。

0

如果您在嵌入式平台上工作,您应该使用一些链接器脚本(lcf文件)以及构建程序,然后您可以详细识别所有部分(堆栈,堆,intvec,bss,文本,代码),它在存储器中的位置(无论是在L1缓存,L2缓存还是DDR中)以及在加载到板子时的开始/结束地址。

问题是,请查看链接器手册(可以在编译器安装目录中找到它),以便正确理解lcf中的关键字。

此外还有一种方法可以分析各个部分,您可以为您的项目创建“地图文件”并通过它。它将列出程序中的所有部分及其地址。

0

你可以尝试使用ollydbg,这是一个免费的调试器。一个缺点就是它以汇编形式显示所有内容,但它会告诉你什么是你的堆栈,堆,甚至是什么在你的寄存器。我不确定这是不是你要找的。

+0

它支持所有平台吗? – 2011-02-07 04:04:29